概要
在 12.x 里面V8模塊內置了該功能,詳見:
- https://medium.com/the-node-js-collection/easily-identify-problems-in-node-js-applications-with-diagnostic-report-dc82370d8029
- https://github.com/nodejs/node/pull/26501
簡要的說是主要通過一列實驗性接口process.report/experimental-report實現(xiàn)的。
實現(xiàn)
- 啟動腳本開啟診斷報告功能
node --experimental-report http_server.js
- 腳本設置參數(shù)
if (process.report) { // 監(jiān)聽報告類型
// 等同
process.report.reportOnFatalError = true;
process.report.reportOnUncaughtException = true;
process.report.reportOnSignal = true; // - 信號監(jiān)聽
process.report.signal = 'SIGQUIT'; // 信號值默認 SIGUSR2
}
- 手動調用1
const SECRET = '45u90rjigjrihfngihghkbgh+jghg/af';
// 診斷報告
function writeReport(WW, MF, req, resp, queryInfoDic) {
if (resp.finished) {
return;
}
if (!queryInfoDic.params.secret ||
queryInfoDic.params.secret.replace(/ /g, '+') !== SECRET) {
resp.end('1');
return;
}
if (!process.report) {
resp.end('writeReport unOpen');
return;
}
resp.end(process.report.writeReport()); // 生成報告、返回系統(tǒng)格式接口
}
只需把此請求掛在http/ws服務器route上即可疾捍。
- 手動調用2
kill -SIGQUIT <pid>
診斷報告文件類型
https://nodejs.org/dist/latest-v12.x/docs/api/report.html
分析
暫時沒有發(fā)現(xiàn)比較好的分析工具徐鹤,待補充