Node內(nèi)存泄漏

收集所有存在內(nèi)存泄漏的所有case熟菲。哪怕一個(gè)字節(jié)也不放過朴恳。

Case1:無限制增長的數(shù)組

varleakArray=[];exports.leak=function(){leakArray.push("leak"+Math.random());};

這個(gè)大概是最常見的內(nèi)存泄漏案例。只要變量leakArray不被回收呆贿,內(nèi)存就有可能無限上漲,且不被回收做入。

解決方案

確認(rèn)你push元素的數(shù)組對象是可以隨著作用域執(zhí)行結(jié)束回收竟块。



Case2:無限制設(shè)置屬性和值

這個(gè)情形在緩存對象中經(jīng)常出現(xiàn):

_.memoize=function(func,hasher){varmemo={};hasher||(hasher=_.identity);returnfunction(){varkey=hasher.apply(this,arguments);return_.has(memo,key)?memo[key]:(memo[key]=func.apply(this,arguments));};};

memoize方法主要是用來解決昂貴CPU耗用的js運(yùn)算的耐齐。它十分有用蒋情。但是在后端使用的時(shí)候要十分小心棵癣。因?yàn)閙emo對象是不會回收的夺衍,每次的參數(shù)不同都會在這個(gè)對象上添加屬性和值。

這個(gè)案例中沟沙,memo對象被當(dāng)作了緩存來使用,一直無法得到回收尝胆。

解決方案

關(guān)于如何規(guī)避這種無限制緩存的問題含衔,請移步到我另開的帖子中看解決方案:http://cnodejs.org/topic/4fafc843e7656c60680306f9



Case3:任何模塊內(nèi)的私有變量和方法均是永駐內(nèi)存的

(function(exports,require,module,__filename,__dirname){varcircle=require('./circle.js');console.log('The area of a circle of radius 4 is '+circle.area(4));exports.get=function(){returncircle();};});

任意編寫的模塊文件中,均會在頭和尾部上添加字符串贪染,以形成閉包杭隙,然后在require的過程中被調(diào)用一次因妙,并且將exports對象存儲在內(nèi)存中,直到進(jìn)程退出才會回收攀涵。

這個(gè)案例中以故,只是內(nèi)存不會回收,但一般不會造成內(nèi)存泄漏炉媒。需要注意的是私有變量不要通過exports上的方法為其添加內(nèi)存占用昆烁。

第一個(gè)案例其實(shí)就是由于這個(gè)原因造成的。



第四個(gè)案例來自于http://cnodejs.org/topic/4fcd020be5e72c25180032e5水援。

//OOM測試for(vari=0;i<100000000;i++){varuser={};user.name='outmem';user.pass='123456';user.email='outmem[@outmem](/user/outmem).com';}

這段代碼最主要的原因在于循環(huán)太大,直接內(nèi)存分配到超過v8內(nèi)存限制數(shù)量或渤。由于JavaScript事件循環(huán)的執(zhí)行機(jī)制奕扣,這段代碼沒有機(jī)會進(jìn)入下一個(gè)事件循環(huán)。用setInterval和setTimeout可以進(jìn)入下一個(gè)循環(huán)池磁。但是不推薦用setInterval和setTimeout楷兽。

在Node下有一個(gè)特殊的方法,process.nextTick();

for(vari=0;i<100000000;i++){process.nextTick(function(){varuser={};user.name='outmem';user.pass='123456';user.email='outmem[@outmem](/user/outmem).com';});}

不過這樣的效率可能不夠好筛圆。因?yàn)槊看味紱]有效利用好一次循環(huán)提岔。

一個(gè)建議是,一次事件循環(huán),不要超過10ms。太長時(shí)間的事件循環(huán)喷面,不僅會存在oom的風(fēng)險(xiǎn)磕瓷,還會阻塞后續(xù)IO的啟動(dòng)硕盹。



http://alinode.aliyun.com/blog/37

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末创淡,一起剝皮案震驚了整個(gè)濱河市部凑,隨后出現(xiàn)的幾起案子比勉,更是在濱河造成了極大的恐慌抖仅,老刑警劉巖砖第,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異智听,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)忽洛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門欲虚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悔雹,“玉大人腌零,你說我怎么就攤上這事∫娼В” “怎么了闲询?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵扭弧,是天一觀的道長。 經(jīng)常有香客問我鸽捻,道長御蒲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮痰滋,結(jié)果婚禮上续崖,老公的妹妹穿的比我還像新娘。我一直安慰自己团搞,他們只是感情好严望,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逻恐,像睡著了一般像吻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上复隆,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天拨匆,我揣著相機(jī)與錄音,去河邊找鬼挽拂。 笑死惭每,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亏栈。 我是一名探鬼主播台腥,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绒北!你這毒婦竟也來了峻汉?” 一聲冷哼從身側(cè)響起俱济,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤辖源,失蹤者是張志新(化名)和其女友劉穎克饶,沒想到半個(gè)月后矾湃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邀跃,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了星爪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖憎瘸,靈堂內(nèi)的尸體忽然破棺而出幌甘,到底是詐尸還是另有隱情,我是刑警寧澤皱埠,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布托修,位于F島的核電站睦刃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婆誓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一文留、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧森书,春花似錦凛膏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽又兵。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間级野,已是汗流浹背辰企。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工潜索, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竹习,地道東北人整陌。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓九默,卻偏偏與公主長得像荤西,于是被迫代替她去往敵國和親勉躺。 傳聞我的和親對象是個(gè)殘疾皇子饵溅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • topics: 1.The Node.js philosophy 2.The reactor pattern 3....
    宮若石閱讀 1,080評論 0 1
  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,332評論 0 6
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法腔召,內(nèi)部類的語法,繼承相關(guān)的語法浊仆,異常的語法,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • Node.js是目前非成撩剩火熱的技術(shù),但是它的誕生經(jīng)歷卻很奇特样傍。 眾所周知衫哥,在Netscape設(shè)計(jì)出JavaScri...
    w_zhuan閱讀 3,615評論 2 41
  • 我很難悄悄 悄悄的如一滴雨落下 沒有閃電 或者沒有雷聲 甚至天空沒有什么變化 就悄悄的落下 我很難 我很難做到
    朱朱老老閱讀 132評論 0 1