记录node内存瓶颈分析
注:僅僅是一篇紀(jì)實(shí)性文章!
概述:不知道因?yàn)槭裁丛?#xff0c;在某個(gè)項(xiàng)目新申請(qǐng)的兩臺(tái)服務(wù)器上將node版本從6.10.0升級(jí)到了6.10.1,發(fā)現(xiàn)在這兩臺(tái)機(jī)器上一個(gè)node進(jìn)程占用內(nèi)存一直再漲,啟動(dòng)10h左右就會(huì)飆升到800M。
服務(wù)器系統(tǒng)版本:CentOS release 6.9 (Final) nodejs版本:6.10.1
查看node進(jìn)程
排查內(nèi)存泄漏
排查內(nèi)存問(wèn)題首先需要借助工具來(lái)獲取不同時(shí)間段的快照文件。
該工具使用簡(jiǎn)潔,不僅提供了生成快照的方法,還可以在命令行中執(zhí)行
kill -USR2 <pid> 復(fù)制代碼來(lái)發(fā)送信號(hào)生成堆轉(zhuǎn)儲(chǔ)文件。不過(guò)在服務(wù)器上安裝的時(shí)候總是會(huì)報(bào)build出錯(cuò)
提供了leak和stats事件,在事件回調(diào)參數(shù)中會(huì)有內(nèi)存泄漏的信息,使用memwatch的事件,再配合heapdump,在觸發(fā)leak事件時(shí),生成快照文件十分好用。不過(guò)同樣,安裝使用時(shí)還是會(huì)報(bào)錯(cuò)。
通過(guò)以上命令生成test-v8.log 然后
npm install tick node-tick-processor test-v8.log 復(fù)制代碼使用時(shí)有報(bào)錯(cuò)
分析快照文件
通過(guò)v8-profiler拿到兩、三份快照文件后,配合chrome的devtool即可進(jìn)行分析。 1.
如上例(該案例代碼摘自他處),點(diǎn)開(kāi)chrome的memory面板,對(duì)不同文件進(jìn)行比較,可以看到哪些構(gòu)造函數(shù)有明顯增加。
想辦法從服務(wù)器拿到文件后,經(jīng)過(guò)分析看不到業(yè)務(wù)代碼的構(gòu)造函數(shù)分配對(duì)象大小有明顯增加,系統(tǒng)函數(shù)和數(shù)組有明顯增加,于是猜測(cè)該版本的node是否有可疑的內(nèi)存泄漏。issue
最終將nodejs升級(jí)到8解決該問(wèn)題
相關(guān)ref:
easy-monit
node-inspector
alinode
總結(jié)
以上是生活随笔為你收集整理的记录node内存瓶颈分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 家里路由器要每天重启-家里路由器要每天重
- 下一篇: 百度云不限速就用它-如何百度云不限速