memleakchecker

1.0.1 • Public • Published

测试内存泄漏

使用方法

往程序里添加的代码

运行的时候加--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就行

Readme

Keywords

none

Package Sidebar

Install

npm i memleakchecker

Weekly Downloads

2

Version

1.0.1

License

ISC

Last publish

Collaborators

  • philoles