您现在的位置是:亿华云 > 系统运维
在 Node.js 中使用诊断报告快速追踪问题
亿华云2025-10-03 05:52:05【系统运维】3人已围观
简介Diagnostic report 是 Node.js v14.x 提供的一个稳定功能,在某些情况下会生成一个 JSON 格式的诊断报告,可用于开发、测试、生产环境。报告会提供有价值的信息,包括:Ja
Diagnostic report 是中使踪问 Node.js v14.x 提供的一个稳定功能,在某些情况下会生成一个 JSON 格式的用诊诊断报告,可用于开发、断报测试、告快生产环境。速追报告会提供有价值的中使踪问信息,包括:JavaScript 和本机堆栈信息、用诊堆统计信息、断报平台信息、告快资源使用情况等,速追帮助用户快速追踪问题。中使踪问
生成诊断报告
提供了多种触发诊断报告的用诊时机,包括:API 调用的断报方式触发、针对未捕获的告快异常触发、用户信号触发、速追致命错误导致应用程序终止触发。
API 触发
调用 writeReport() 方法,会立即生成一份诊断报告,该方法可以写在仅当你需要诊断报告时调用,以获取所需的信息。
const process = require(process); process.report.writeReport();报告默认目录:Node.js 进程当前工作目录报告默认名称:YYYYMMDD.HHMMSS.PID.SEQUENCE.txt
未捕获错误触发
当程序遇到未捕获错误时主动触发,需要在启动服务时加上 --report-uncaught-exception 标志,例如:node --report-uncaught-exception app.js
// app.js throw new Error(testerror)信号触发
正在运行的 Node.js 进程在接收到特定的信号后生成诊断报告,云南idc服务商默认的信号为 -SIGUSR2,同样在启动服务时加上 --report-on-signal 标志。
// app.js console.log(`process id: ${ process.pid}`) setInterval(() => { }, 1000);启动服务 node --report-on-signal app.js 之后触发信号 kill -SIGUSR2 55800 会看到如下信息:
process id: 3512 Writing Node.js report to file: report.20210113.211250.3512.0.001.json Node.js report completed基于信号的报告生成,目前 Windows 系统是不支持的。通常无需修改触发报告的信号,如果 -SIGUSR2 信号已用途其它用途,可通过 --report-signal 标志修改,例如在启动服务时这样执行:node --report-on-signal --report-signal SIGPIPE app.js
致命错误导致应用程序终止触发
在启动服务时上 --report-on-fatalerror 标志,当程序发生一些致命错误,例如内存泄漏、Node.js 运行时的内部错误等也会触发生成诊断报告。以下是一个触发内存泄漏的例子:
const format = bytes => (bytes / 1024 / 1024).toFixed(2) + MB; const print = () => { const memoryUsage = process.memoryUsage(); console.log(`heapTotal: ${ format(memoryUsage.heapTotal)}, heapUsed: ${ format(memoryUsage.heapUsed)}`); } const total = []; setInterval(() => { total.push(new Array(20, 1024, 1024)); print(); }, 1000)用例分析
事件循环计时器(timer)句柄信息
以下代码就是每 10 秒中程序执行一次,你可以通过上面讲的信号的方式在启动之后获取诊断报告。
console.log(process id: ${ process.pid}) setInterval(() => { }, 1000 * 10);诊断报告会有很多信息,我们要看 timer 的信息,定时器属于事件循环的阶段之一,所以定位到 libuv 这个数组里,以下报告则展示其句柄信息 is_active 就是活动的云服务器提供商,firesInMsFromNow 是该计时器的触发还需要多长时间,当前示例大约还要 9 秒多执行。
"libuv": [ { "type": "timer", "is_active": true, "is_referenced": true, "address": "0x0000000105804100", "repeat": 0, "firesInMsFromNow": 9067, "expired": false } ]参考:Easily identify problems in Node.js applications with Diagnostic Report
诊断工具(report-toolkit)
report-toolkit 是 IBM 开发的一款工具,用于简化 Node.js 的诊断报告的使用,使用它在某些情况下可帮助我们快速定位问题。首先全局安装它,如下命令,之后会生成一个全局的可执行命令 rtk
npm install report-toolkit --globalinspect 命令
inspect 命令用于自动发现 Node.js 诊断报告中的潜在问题,如果检测出问题会输出一条信息,可能是警告。
const format = function (bytes) { return (bytes / 1024 / 1024).toFixed(2) + MB; }; const print = function() { const memoryUsage = process.memoryUsage(); console.log(`heapTotal: ${ format(memoryUsage.heapTotal)}, heapUsed: ${ format(memoryUsage.heapUsed)}`); } const total = []; setInterval(function() { total.push(new Array(20 * 1024 * 1024)); // 大内存占用 print(); }, 1000)执行 node --report-on-fatalerror test.js 后过一小会报 avaScript heap out of memory 错误同时会生成一份诊断报告,下面是我们使用 rtk 诊断工具检测得到如下结果:
diff 命令diff 命令正如它的名字一样,是用来比较多个报告之间的不同。
关于诊断报告工具 report-toolkit 的更多使用指南参考 report-toolkit Quick Start。
Reference
Node.js 14 版本:新的诊断工具、功能和性能增强 Easily identify problems in Node.js applications with Diagnostic Report Introducing report-toolkit for Node.js Diagnostic Reports Node.js latest v14.x Diagnostic report亿华云很赞哦!(56)
相关文章
- 报告:数据中心的需求和使用率持续上升
- 域名资源有限,好域名更是有限,但机会随时都有,这取决于我们能否抓住机会。一般观点认为,国内域名注册太深,建议优先考虑外国注册人。外国注册人相对诚实,但价格差别很大,从几美元到几十美元不等。域名投资者应抓住机遇,尽早注册国外域名。
- 公司和个人选域名方法一样吗?有什么不同?
- 四、配置网站,填充内容
- 区域数据中心如何推动数字化转型
- 3.dns修改成功后,点击“域名解析”,按提示进行操作。解析格式一般如下:
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 2、定期提交和投标域名注册。例如,益华网络点击“立即预订”后,平台会抢先为客户注册域名。当然,一个域名可能会被多个客户预订,所以出价最高的人中标。
- 戴尔PowerScale存储有效降低企业闪存成本
- 为什么起域名意义非凡?起域名有什么名堂?
热门文章
站长推荐
关于光纤的六大常见误解
四、长串数字域名
付款完成后,您只需耐心等待,如果您注册成功,系统会提示您。这里需要注意的是,域名是一个即时产品,只有在最终付款成功时才能预订,注册成功后不能更改。
在数以亿计的网站中,我们应该抓住每一个可能带来宣传的机会,域名可以带有企业的名字,一般可以使用汉语拼音或者英语单词或者是相关缩写的形式,只要用户记住了你企业的名字,就能很容易的打出你的网站域名,同样的,记住了网站域名也能很快的记住你公司的名字。
数据中心如何减少用水量并提高效率?
尽量不要在域名中出现特殊字符,这样的域名很容易导致访问者输入错误,同时给人留下不专业的印象,降低网站的可信度,并流失大量潜在客户。
并非一个好米任何人都会给你一个好的价格。那你该如何用以有的好米卖出最理想的价格呢?
4.选择顶级的域名注册服务商