现在已经有许多工具用于定位Node应用的内存泄漏,下面是一些常见的工具。
1.v8-profile,可以用于对V8堆内存抓取快照和对CPU进行分析,目前项目很久没有人维护。
2.node-heapdump。它允许对V8堆内存抓取快照,用于事后分析。
3.node-mtrace。 它使用GCC的mtrace工具来分析堆的使用。
4.dtrace。
5.node-memwatch。
这里只介绍通过node-heapdump和node-memwatch两种。
5.5.1 node-heapdump
想了解node-heapdump对内存泄漏进行排查的方式,我们需要先构造如下一份内存泄漏的代码示例,并将其存为server.js文件。
var leakArray = [];
var 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);
console.log('Server running at http://127.0.0.1:1337/');
每次访问,leakArray都会增加新的数据。从而造成内存泄漏。
安装node-heapdump,通过npm install healpdump,安装后,通过如下代码:
var heapdump = require(‘heapdump’);
服务启动后,通过kill -USR2 抓拍一份内存快照。
通过Chrome的开发者工具打开查看。
5.5.2 node-memwatch
准备一份内存泄漏的代码:
var memwatch = require('memwatch');
memwatch.on('leak', function (info) {
console.log('leak:')