参考《深入浅出nodejs》
v8-profiler:由Danny Coates提供,可以用于对V8堆内存抓取快照和对CPU进行分析,3年没有维护
node-heapdump:允许对V8堆内存抓取快照,用于事后分析
node-mtrace:使用了GCC的mtrace工具来分析堆的使用
node-memwatch:来自Mozilla的Lloyd Hilaiel贡献的模块
1.node-heapdump
var leakArray=[]; var leak=function (){ leakArray.push("leak:"+Match.random()); } http.createServer(function (req,res) { leak(); res.writeHead(200,{'Content-Type':'text/plain'}); res.end('Hello World\n'); }).listen(1337); console.log('开始监听');安装node-heapdump
npm install heapdump安装后再代码第一行添加代码引入
var heapdump=require('heapdump');通过服务进程发送SIGUSR2信号,让node-heapdump抓拍一份堆内存的快照。
$ kill -USR2 <pid>在文件目录下以heapdump-<sec>/<usec>.heapsnapshot的格式存放。的json文件,需要通过Chrome的开发者工具打开查看
2.node-memwatch
安装node-memwatch
var memwatch=require('memwatch'); //如果经过连续5次垃圾回收后,内存仍然没有被释放,意味着有内存泄漏的产生,会触发一个leak事件 memwatch.on('leak',function(info){ console.log('leak:'); console.log(info); }); //每次进行全堆垃圾回收时,将会触发一次stats时间 memwatch.on('stats',function(stats){ console.log('stats:'); console.log(stats); }); var http=require('http'); var leakArray=[]; var leak=function (){ leakArray.push("leak:"+Match.random()); } http.createServer(function (req,res) { leak(); res.writeHead(200,{'Content-Type':'text/plain'}); res.end('Hello World\n'); }).listen(1337); console.log('开始监听');