概要
Heap Dump 以前我們分析問題的時(shí)候桑包,需要手動(dòng)安裝對(duì)應(yīng)的類庫(kù)或者使用 AliNode骏掀。
在 12.x 里面V8模塊內(nèi)置了該功能,詳見:
內(nèi)容比較晦澀writeheapsnapshot直接調(diào)用此接口可簡(jiǎn)單實(shí)現(xiàn)
實(shí)現(xiàn)
- 信號(hào)監(jiān)聽
process.on('SIGUSR1', () => {
const { writeHeapSnapshot } = require('v8');
console.log('Heap snapshot has written:', writeHeapSnapshot());
});
- 手動(dòng)調(diào)用1
const SECRET = '45u90rjigjrihfngihghkbgh+jghg/af';
// 運(yùn)行快照-通過http協(xié)議開啟
function heapDump(req, resp, queryInfoDic) {
const { writeHeapSnapshot } = require('v8');
if (resp.finished) {
return;
}
// 參數(shù)校驗(yàn)權(quán)限
if (!queryInfoDic.params.secret ||
queryInfoDic.params.secret.replace(/ /g, '+') !== SECRET) {
resp.end('1');
return;
}
resp.end(writeHeapSnapshot()); // 采用系統(tǒng)快照名、返回給客戶端
}
只需把此請(qǐng)求掛在http/ws服務(wù)器route上即可禀综。
- 手動(dòng)調(diào)用2
kill -SIGUSR1 <pid>