999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

關(guān)于Node的內(nèi)存泄漏簡(jiǎn)析

2017-12-14 23:32:44邵晨龍江雪
中國(guó)科技博覽 2017年46期
關(guān)鍵詞:進(jìn)程解決方案

邵晨龍++江雪

[摘 要]Node對(duì)內(nèi)存泄漏十分敏感,一旦線上應(yīng)用有成千上萬的流量,哪怕是一個(gè)字節(jié)的內(nèi)存泄漏也會(huì)造成堆積,垃圾回收過程中將耗費(fèi)更多時(shí)間進(jìn)行對(duì)象掃描,應(yīng)用響應(yīng)緩慢,直到進(jìn)程內(nèi)存溢出,應(yīng)用崩潰。本文不僅分析了造成內(nèi)存泄漏的原因,并介紹了幾種主流的排查方案。

[關(guān)鍵詞]Node 內(nèi)存泄漏

中圖分類號(hào):TG294 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-914X(2017)46-0046-01

1 引言

內(nèi)存泄漏通常產(chǎn)生于無意間,較難排查。盡管內(nèi)存泄漏的情況不盡相同,但其實(shí)質(zhì)只有一個(gè),那就是應(yīng)當(dāng)回收的對(duì)象出現(xiàn)意外而沒有被回收,變成了常駐在老生代中的對(duì)象。

2 引發(fā)內(nèi)存泄漏的原因

通常,造成內(nèi)存泄漏的原因主要有兩個(gè):緩存,隊(duì)列消費(fèi)不及時(shí)。

2.1 緩存

緩存在應(yīng)用中的作用舉足輕重,可以十分有效地節(jié)省資源。因?yàn)樗脑L問效率要比I/O的效率高,一旦命中緩存,就可以節(jié)省一次I/O的時(shí)間。

但是在Node中,緩存并非物美價(jià)廉。一旦一個(gè)對(duì)象被當(dāng)作緩存來使用,那就意味著它將會(huì)常駐在老生代中。緩存中存儲(chǔ)的鍵越多,長(zhǎng)期存活的對(duì)象也就越多,這將導(dǎo)致垃圾回收在進(jìn)行掃描和整理時(shí),對(duì)這些對(duì)象做無用功。

另一個(gè)問題在于,JavaScript開發(fā)者通常喜歡用對(duì)象的鍵值對(duì)來緩存東西,但這與嚴(yán)格意義上的緩存又有著區(qū)別,嚴(yán)格意義的緩存有著完善的過期策略,而普通對(duì)象的鍵值對(duì)并沒有。所以,在Node中,任何試圖拿內(nèi)存當(dāng)緩存的行為都應(yīng)當(dāng)被限制。當(dāng)然,這種限制并不是不允許使用的意思,而是要小心為之。

為了解決緩存中的對(duì)象永遠(yuǎn)無法釋放的問題,需要加入一種策略來限制緩存的無限增長(zhǎng),例如將記錄鍵記錄在數(shù)組中,一旦超過數(shù)量,就以先進(jìn)先出的方式進(jìn)行淘汰,這種策略適合于小場(chǎng)景的案例中使用,在比較大型的應(yīng)用場(chǎng)景一般使用的是基于LRU(最近最少使用)算法的策略。

除了限制緩存的大小外,還需要考慮到進(jìn)程間是無法共享內(nèi)存的。如果在進(jìn)程內(nèi)使用緩存,這些緩存不可避免地有重復(fù),對(duì)物理內(nèi)存的使用是一種浪費(fèi)。目前較好的解決方案是采用進(jìn)程外的緩存,進(jìn)程自身不存儲(chǔ)狀態(tài)。外部的緩存軟件有著良好的緩存過期淘汰策略以及自身的內(nèi)存管理,不影響Node進(jìn)程的性能。市面是較好的緩存有Redis和Memcached。

2.2 隊(duì)列

在解決了緩存帶來的內(nèi)存泄漏問題后,另一個(gè)不經(jīng)意產(chǎn)生的內(nèi)存泄漏則是隊(duì)列。在JavaScript中可以通過隊(duì)列(數(shù)組對(duì)象)來完成許多特殊的需求,比如Bagpipe。隊(duì)列在消費(fèi)者-生產(chǎn)者模型中經(jīng)常充當(dāng)中間產(chǎn)物。這是一個(gè)容易忽略的情況,因?yàn)樵诖蠖鄶?shù)應(yīng)用場(chǎng)景下,消費(fèi)的速度遠(yuǎn)遠(yuǎn)大于生產(chǎn)的速度,內(nèi)存泄漏不易產(chǎn)生。但是一旦消費(fèi)速度低于生產(chǎn)速度,將會(huì)形成堆積。

舉個(gè)例子,有的應(yīng)用會(huì)收集日志。如果欠缺考慮,也許會(huì)采用數(shù)據(jù)庫來記錄日志。日志通常會(huì)是海量的,數(shù)據(jù)庫構(gòu)建在文件系統(tǒng)之上,寫入效率遠(yuǎn)遠(yuǎn)低于文件直接寫入,于是會(huì)形成數(shù)據(jù)庫寫入操作的堆積,而JavaScript中相關(guān)的作用域也不會(huì)得到釋放,內(nèi)存占用不會(huì)回落,從而出現(xiàn)內(nèi)存泄漏。

遇到這種場(chǎng)景,表層的解決方案是換用消費(fèi)速度更高的技術(shù)。在日志收集的案例中,換用文件寫入日志的方式會(huì)更高效。但是,如果生產(chǎn)速度因?yàn)槟承┰蛲蝗患ぴ觯蛘呦M(fèi)速度因?yàn)橥蝗坏南到y(tǒng)故障而降低,內(nèi)存泄漏還是可能會(huì)出現(xiàn)。

深度的解決方案應(yīng)該是監(jiān)控隊(duì)列的長(zhǎng)度,一旦堆積,應(yīng)當(dāng)通過監(jiān)控系統(tǒng)產(chǎn)生報(bào)警并通知相關(guān)人員。另一個(gè)解決方案是任意異步調(diào)用都應(yīng)該包含超時(shí)機(jī)制,一旦在限定的時(shí)間內(nèi)未完成響應(yīng),通過回調(diào)函數(shù)傳遞超時(shí)異常,使得任意異步調(diào)用的回調(diào)都具備可控的響應(yīng)時(shí)間,給消費(fèi)速度一個(gè)下限值。

對(duì)于Bagpipe而言,它提供了超時(shí)模式和拒絕模式。啟用超時(shí)模式時(shí),調(diào)用加入到隊(duì)列中就開始計(jì)時(shí),超時(shí)就直接響應(yīng)一個(gè)超時(shí)錯(cuò)誤。啟用拒絕模式,當(dāng)隊(duì)列擁塞時(shí),新到來的調(diào)用會(huì)直接響應(yīng)擁塞錯(cuò)誤。這兩種模式都能夠有效地防止隊(duì)列擁塞導(dǎo)致的內(nèi)存泄漏問題。

3 內(nèi)存泄漏的排查方案

在Node中,由于V8的堆內(nèi)存大小的限制,它對(duì)內(nèi)存泄漏非常敏感。當(dāng)在線服務(wù)的請(qǐng)求量變大時(shí),哪怕是一個(gè)字節(jié)的泄露都會(huì)導(dǎo)致內(nèi)存占用過高。

常見的用于排查Node應(yīng)用內(nèi)存泄露的有以下幾個(gè)工具:

*v8-profiler,用于對(duì)V8堆內(nèi)存抓取快照和對(duì)CPU進(jìn)行分析;

*node-heapdump,允許對(duì)V8堆內(nèi)存抓取快照,用于事后分析,這是Node核心貢獻(xiàn)者編寫的模塊;

*node-mtrace,它使用了GCC的mtrace工具來分析堆的使用;

*node-memwatch,來自Mozilla的LloydHilaiel貢獻(xiàn)的模塊,采用WTFP許可發(fā)布。

4 總結(jié)

所謂知己知彼,百戰(zhàn)不殆,只有深入了解了造成內(nèi)存泄漏的主要原因,才能對(duì)癥下藥,盡可能地規(guī)避造成內(nèi)存泄漏的行為,并采用主流的工具予以排查消除隱患。endprint

猜你喜歡
進(jìn)程解決方案
艾默生自動(dòng)化解決方案
解決方案和折中方案
債券市場(chǎng)對(duì)外開放的進(jìn)程與展望
4G LTE室內(nèi)覆蓋解決方案探討
7大睡眠問題解決方案
母子健康(2015年1期)2015-02-28 11:21:44
Moxa 802.11n WLAN解決方案AWK-1131A系列
我國(guó)高等教育改革進(jìn)程與反思
Linux僵死進(jìn)程的產(chǎn)生與避免
男女平等進(jìn)程中出現(xiàn)的新矛盾和新問題
俄羅斯現(xiàn)代化進(jìn)程的阻礙
主站蜘蛛池模板: 她的性爱视频| 91在线高清视频| 亚洲男人的天堂久久精品| 国产精品三级专区| 欧美爱爱网| 99热最新在线| 国产香蕉在线视频| 久久亚洲国产一区二区| 国产综合无码一区二区色蜜蜜| 少妇极品熟妇人妻专区视频| 无码精油按摩潮喷在线播放| 久久99国产精品成人欧美| 国产a网站| 亚洲日本韩在线观看| 久青草免费视频| 亚洲国产精品一区二区第一页免 | 日韩在线欧美在线| 欧美国产日韩在线观看| 小说区 亚洲 自拍 另类| 久久国产精品电影| 国产精品亚洲五月天高清| 亚洲无码精彩视频在线观看| 92精品国产自产在线观看| yy6080理论大片一级久久| 国产草草影院18成年视频| 国产成a人片在线播放| 波多野吉衣一区二区三区av| 亚洲人成在线免费观看| 精品国产电影久久九九| 日本在线视频免费| 91在线精品麻豆欧美在线| 日韩免费毛片视频| 欧美精品伊人久久| 92午夜福利影院一区二区三区| 国产专区综合另类日韩一区| 亚洲毛片一级带毛片基地| 播五月综合| 国产午夜福利在线小视频| 国产美女免费| 精品一区二区无码av| 久热99这里只有精品视频6| 亚洲第一成人在线| 91综合色区亚洲熟妇p| 欧美精品亚洲精品日韩专区| 一本大道在线一本久道| 国产高清无码第一十页在线观看| 久久综合激情网| 99久久精品国产麻豆婷婷| 亚洲青涩在线| 国产美女一级毛片| 亚洲中文字幕久久精品无码一区 | 2022国产无码在线| www.99精品视频在线播放| 欧美亚洲一区二区三区导航 | 成人欧美在线观看| 婷婷久久综合九色综合88| 3D动漫精品啪啪一区二区下载| 99热亚洲精品6码| 日本妇乱子伦视频| 免费在线色| 日本欧美午夜| 欧美天天干| 久久久国产精品免费视频| 亚洲欧美在线精品一区二区| 成人午夜亚洲影视在线观看| 久久香蕉欧美精品| 久久亚洲高清国产| 久久久久亚洲Av片无码观看| 亚洲中文久久精品无玛| 97国产在线观看| 欧美成人二区| 热这里只有精品国产热门精品| 99久久国产综合精品女同| 亚洲精品视频在线观看视频| 欧美国产日韩另类| 97在线公开视频| 亚洲人精品亚洲人成在线| 欧美高清三区| 成AV人片一区二区三区久久| 亚洲成人在线免费观看| www.91中文字幕| 国产尤物在线播放|