使用Chrome+node-inspector查找NodeJS內存泄漏


關鍵字:NodeJS, 內存泄漏,node-inspector,Chrome

OS:Windows 10

 

本文介紹如何使用node-inspector+Chrome查找nodejs內存泄漏。

 

1.創建一個Express app, 參考http://www.cnblogs.com/ldlchina/p/4054974.html。

修改app.js內容如下:

//app.js
var app = require('express')();
var http = require('http').Server(app);

var leakobjs = [];
function LeakClass(){
    this.x = 1;
}

app.get('/', function(req, res){
    console.log('get /');
    for(var i = 0; i < 1000; i++){
        leakobjs.push(new LeakClass());
    }
    res.send('<h1>Hello world</h1>');
});

http.listen(3000, function(){
    console.log('listening on port 3000');
});

運行cmd:”node app.js“

在Chrome里面打開頁面:http://localhost:3000/。不停的刷新給頁面,nodejs的內存將不停的增長。

 

2.安裝使用node-inspector來調試后台程序。請參考http://www.cnblogs.com/ldlchina/p/3551277.html

運行cmd: "node --debug app.js"。

運行cmd: "node-inspector"。

 

3.在Chrome里面打開http://127.0.0.1:8080/debug?port=5858, 如下圖:

 

4.選擇”Profiles“標簽,選擇”Take Heap Snapshot“,點擊”Take Snapshot“。如下圖

 

5.打開一個新的Chrome頁面,運行http://localhost:3000/。

 

6.再次選擇”Profiles“標簽,選擇”Take Heap Snapshot“,點擊”Take Snapshot“。

選擇Comparison,你將看到”LeakClass“導致了內存的增長,如下圖。這樣我們可以檢查代碼中關於LeakClass的部分,經驗告訴我們要避免不限制的增長數組,否則在大訪問量的情況下內存會耗光。

 

內存泄露定位工具

現在已經有許多好用且不斷增強的工具用於定位Node.js應用的內存泄露。下面是其中的一些:

  • https://github.com/lloyd/node-memwatch。注:如果”node install memwatch“安裝失敗,那就試試”node install memwatch-next“
  • Jimb Esser的node-mtrace,它使用了GCC的mtrace工具來分析堆的使用。
  • Dave Pacheco的node-heap-dump對V8的堆抓取了一張快照並把所有的東西序列化進一個巨大的JSON文件。它還包含了一些分析研究快照結果的JavaScript工具。
  • Danny Coates的v8-profilernode-inspector提供了綁定在Node中的V8分析器和一個基於WebKit Web Inspector的debug界面。

 

更多內容請參考:

Memory leak patterns in JavaScript。

The node.js Profiling Guide that Hasn’t Existed - Finding The Cause of a Memory Leak Using Heap Snapshots。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM