返回顶部
首页 > 资讯 > 前端开发 > html >在Node.js中怎么快速了解出错的问题
  • 698
分享到

在Node.js中怎么快速了解出错的问题

2024-04-02 19:04:59 698人浏览 八月长安
摘要

本篇内容介绍了“在node.js中怎么快速了解出错的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Di

本篇内容介绍了“在node.js中怎么快速了解出错的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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  的诊断报告的使用,使用它在某些情况下可帮助我们快速定位问题。首先全局安装它,如下命令,之后会生成一个全局的可执行命令 rtk

npm 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 诊断工具检测得到如下结果:

在Node.js中怎么快速了解出错的问题

diff 命令diff 命令正如它的名字一样,是用来比较多个报告之间的不同。

在Node.js中怎么快速了解出错的问题

关于诊断报告工具 report-toolkit 的更多使用指南参考 report-toolkit Quick Start。

“在Node.js中怎么快速了解出错的问题”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 在Node.js中怎么快速了解出错的问题

本文链接: https://lsjlt.com/news/73918.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 在Node.js中怎么快速了解出错的问题
    本篇内容介绍了“在Node.js中怎么快速了解出错的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Di...
    99+
    2024-04-02
  • 怎样快速解决图片溢出div的问题
    本篇文章给大家分享的是有关怎样快速解决图片溢出div的问题,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。前两天编写了一个前端页面,在本机上显示...
    99+
    2024-04-02
  • 怎么快速解决mysql_config not found的问题
    本篇内容主要讲解“怎么快速解决mysql_config not found的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么快速解决mysql_confi...
    99+
    2024-04-02
  • win7耳机和音箱没声音怎么解决如何快速找出问题所在
      电脑出现没声音是很经常发生的事,但是电脑没声音的原因很多,如果要你一一去排除的话,有的时候不知道要排除到什么时候。但是如果你是win7系统,那么有个简单的方法能够让你找出问题的所在。   1、win7有个自动帮你找到...
    99+
    2023-06-01
    win7 耳机没声音 音箱没声音 耳机 音箱 声音
  • 如何快速解决ThinkPHP5.1出现MISS缓存未命中问题
    这篇文章主要介绍了如何快速解决ThinkPHP5.1出现MISS缓存未命中问题的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何快速解决ThinkPHP5.1出现MISS缓存未命中问题文章都会有所收获,下面我们...
    99+
    2023-07-05
  • 快速解决fragment中onActivityResult不调用的问题
    fragment 通过startActivityForResult方法启动另一个activity,返回时,不调用onActivityResult方法,解决步骤:   在Fragment所属的Activity中,重写了onActiv...
    99+
    2023-05-31
    fragment onactivityresult 不调用
  • 怎么解决php fpm出错问题
    这篇文章主要介绍“怎么解决php fpm出错问题”,在日常操作中,相信很多人在怎么解决php fpm出错问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决php fpm出错问题”的疑惑有所帮助!接下来...
    99+
    2023-06-26
  • axios+laravel出错问题怎么解决
    这篇文章主要介绍“axios+laravel出错问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“axios+laravel出错问题怎么解决”文章能帮助大家解决问题。Axios 简介Axio...
    99+
    2023-07-06
  • 快速解决mysql导出scv文件乱码、蹿行的问题
    工作原因,常常不能实现完全的线上化(即,所有数据都在线上完成,不需要导入导出),而导出Excel常常比修炼成仙还慢,因此,我们将数据库文件导出到本地使用的时候,常常使用的方法的是导成CSV格式。 而csv格式的也常常...
    99+
    2022-05-24
    mysql 导出scv 乱码 蹿行
  • 服务器出现了问题怎么解决
    服务器出现问题解决的方法:1、如果是应用服务无法正常运行,通过重启机器或相关处理后即可很快恢复正常;2、如果是服务器硬件故障,需要购买硬件快递或送到机房进行更换;3、如果是服务器访问量过大,导致服务器无法访问,可以升级带宽或联系服务商解决问...
    99+
    2024-04-02
  • 关于在DLL中用EnterCriticalSection出错的问题
    在使用EnterCriticalSection函数时,可能会出现以下错误:1. 错误代码:ERROR_INVALID_HANDLE(...
    99+
    2023-08-08
    DLL
  • 在Discuz中遇到通信失败问题怎么办?快速解决方案分享
    在Discuz中遇到通信失败问题时,可能会影响用户的正常交流和使用体验。为了解决这一问题,可以尝试以下快速解决方案,并附上具体的代码示例,帮助用户快速定位和修复通信失败的情况。 一、检...
    99+
    2024-03-10
    通信 解决 discuz 网络问题
  • MySQL字符集出错的问题怎么解决
    本篇内容主要讲解“MySQL字符集出错的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL字符集出错的问题怎么解决”吧!  实例讲解...
    99+
    2024-04-02
  • 怎么快速的了解某种数据库
    这篇文章给大家分享的是有关怎么快速的了解某种数据库的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这段时间由于工作需要,接触了多种数据库。其中关系型数据库包括:Oracle、DB2...
    99+
    2024-04-02
  • php如果出现了ueditor上传错误问题该怎么解决
    小编给大家分享一下php如果出现了ueditor上传错误问题该怎么解决,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!php出现ueditor上传错误的解决办法:1...
    99+
    2023-06-06
  • 云主机存储出问题了怎么解决
    如果云主机存储出现问题,可以尝试以下解决方法:1. 检查连接:确保云主机与存储设备之间的连接正常。可以尝试重新插拔数据线或更换连接端...
    99+
    2023-09-08
    云主机
  • 怎么快速解决go get golang.org/x包不成功的问题
    这篇文章主要讲解了“怎么快速解决go get golang.org/x包不成功的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么快速解决go get golang.org/x包不成功的...
    99+
    2023-06-21
  • Apache函数在Java中的Load过程中出现了什么问题?
    在Java开发中,Apache函数是非常常见的工具库。然而,有时候在使用这些函数时会出现一些问题,其中最常见的问题就是在Load过程中出现错误。 这个问题的主要原因是因为Java的ClassLoader机制不同于其他语言,所以在Load过...
    99+
    2023-09-07
    load apache 函数
  • Vue实例的错误处理揭秘:快速解决常见问题
    在 Vue.js 应用中,错误处理至关重要,因为它有助于识别和解决潜在的问题,从而确保应用的稳定性。Vue 提供了多种机制来处理错误,包括生命周期钩子、错误捕获和自定义错误处理。 生命周期钩子 Vue 生命周期中提供了几个钩子,用于处理...
    99+
    2024-02-18
    Vue 错误处理 Vue 生命周期钩子 错误捕获
  • 怎么在CSS中解决flex-basis 文本溢出问题
    怎么在CSS中解决flex-basis 文本溢出问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1. flex 家族flex 里有很多的属性,我们经常用到的就是如下操作:.c...
    99+
    2023-06-08
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作