欢迎访问广东leyu乐鱼全站app叉车设备有限公司官网!

广东leyu乐鱼全站app叉车设备有限公司

广东leyu乐鱼全站app叉车设备有限公司

—— 持续领航 品牌经营 ——

全国服务热线

0741-77740542
14296271249
搜索关键词:

在 Node.js 中使用诊断陈诉快速追踪问题

来源:乐鱼官网推荐   发布时间:2021-12-10 01:23nbsp;  点击量:

本文摘要:作者:五月君 泉源:Nodejs技术栈Diagnostic report 是 Node.js v14.x 提供的一个稳定功效,在某些情况下会生成一个 JSON 花样的诊断陈诉,可用于开发、测试、生产情况。陈诉会提供有价值的信息,包罗:JavaScript 和本机客栈信息、堆统计信息、平台信息、资源使用情况等,资助用户快速追踪问题。生成诊断陈诉提供了多种触发诊断陈诉的时机,包罗:API 挪用的方式触发、针对未捕捉的异常触发、用户信号触发、致命错误导致应用法式终止触发。

乐鱼官网推荐

作者:五月君 泉源:Nodejs技术栈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 历程在吸收到特定的信号后生成诊断陈诉,默认的信号为 -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 的诊断陈诉的使用,使用它在某些情况下可资助我们快速定位问题。首先全局安装它,如下下令,之后会生成一个全局的可执行下令 rtknpm install report-toolkit --global inspect 下令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。ReferenceNode.js 14 版本:新的诊断工具、功效和性能增强Easily identify problems in Node.js applications with Diagnostic ReportIntroducing report-toolkit for Node.js Diagnostic ReportsNode.js latest v14.x Diagnostic report。


本文关键词:在,Node.js,乐鱼官网推荐,中,使用,诊断,陈诉,快速,追踪,问题

本文来源:leyu乐鱼全站app-www.hqatzy.com

微信二维码 微信二维码
联系我们

电话:0741-77740542
手机:14296271249
Q Q:455117015
邮箱:admin@hqatzy.com
联系地址:福建省漳州市长岛县高筑大楼43号

Copyright © 2004-2021 www.hqatzy.com. leyu乐鱼全站app科技 版权所有

备案号:ICP备18962878号-4