memleakchecker
v1.0.1
Published
check memory leak
Downloads
12
Readme
#测试内存泄漏
##使用方法
###往程序里添加的代码
运行的时候加--expose-gc参数
let mem = require('../memleakchecker').mem;
mem.setOptions({
heapSnapshotFolder : 'yourFolderToSaveHeapSnapshot', //保存快照的文件夹
maxSnapshot : 5 //最多保存多少快照
}).start();
在可能泄漏的地方调用 mem.monitor(); //手动开启gc
具体可以看sample/leak.js 如果有内存泄漏,会在命令行里显示,保存内存快照,用devtool或者chrome查看对比
###测试时候
let memstress = require('../lib/memstress.js').memstress;
/*
* 支持多种参数形式
* 就是loadtest的参数,其实就是多访问几次触发内存泄漏
* memStress(url)
* memStress({url: url, maxSeconds:10})
* memStress(url, callback)
* memStress({url: url, maxSeconds:10}, callback)
*/
memstress('http://127.0.0.1:1337/');
一般放单元测试最后就行了
it('memory leak', (done)=>{
let memstress = require('../index.js').memstress;
memstress('http://127.0.0.1:1337/', done); //done是回调,要等程序运行完
})
thinkjs里使用
把memleakchecker放到node_module文件夹里,启动的时候加--expose-gc参数,开启手动回收
node --expose-gc www/development.js
在src/common/bootstrap/里面加一个文件memleakchecker.js,来启动(如果实际环境要去掉)
'use strict';
if (think.env === 'development') {
let mem = require('memleakchecker').mem;
mem.setOptions({
heapSnapshotFolder : 'yourFolderToSaveHeapSnapshot', //保存快照的文件夹
maxSnapshot : 5 //最多保存多少快照
}).start();
}
在src/common/bootstrap/middleware.js里面加上,设置一个名字是memleakchecker的middleware来手动开启垃圾回收
think.middleware('memleakchecker', http => {
if (think.env === 'development') {
global.gc();
}else{
console.log('Please delete memleakchecker if it is not in development mode');
}
});
在src/common/config/hook.js里面加上这个middleware
export default {
controller_before: ["append", "memleakchecker"]
}
test/index.js里面最后加
it('memory leak', (done)=>{
let memstress = require('memleakchecker').memstress; //包的路径
memstress('http://127.0.0.1:8360/', done); //done是回调,要等程序运行完
});
进入thinkjs项目文件夹以后,运行npm test就行