在Node中,由于V8的对内存大小的限制,他对内存泄漏非常敏感。
node-heapdump工具。
示例代码:
const leakArray = [];
const leak = function () {
leakArray.push("leak " + Math.random());
}
http.createServer(function(req, res) {
leak();
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("Hello World\n");
}).listen(1337);
在上面代码中,每次访问服务器进程都会引起leakArray数组中元素的增加,而且得不到释放。
安装node-heapdump工具
npm install heapdump
安装后在第一行引入
const heapdump = require('heapdump')
启动服务进程,访问多次后,leakArray数组中就会积累了大量的元素。这个时候通过向服务进程发送SIGUSR2信号,让node-heapdump抓拍一份堆内存的快照。
kill -USR2 <pid>
这份快照会在文件目录下以heapdump-<sec>.<usec>.heapsnapshot的格式存放。可以通过chrom的开发者工具打开查看