概要
Heap Dump 以前我们分析问题的时候,需要手动安装对应的类库或者使用 AliNode。
在 12.x 里面V8模块内置了该功能,详见:
内容比较晦涩writeheapsnapshot直接调用此接口可简单实现
实现
- 信号监听
process.on('SIGUSR1', () => {
const { writeHeapSnapshot } = require('v8');
console.log('Heap snapshot has written:', writeHeapSnapshot());
});
- 手动调用1
const SECRET = '45u90rjigjrihfngihghkbgh+jghg/af';
// 运行快照-通过http协议开启
function heapDump(req, resp, queryInfoDic) {
const { writeHeapSnapshot } = require('v8');
if (resp.finished) {
return;
}
// 参数校验权限
if (!queryInfoDic.params.secret ||
queryInfoDic.params.secret.replace(/ /g, '+') !== SECRET) {
resp.end('1');
return;
}
resp.end(writeHeapSnapshot()); // 采用系统快照名、返回给客户端
}
只需把此请求挂在http/ws服务器route上即可。
- 手动调用2
kill -SIGUSR1 <pid>