成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 Node.js 中使用診斷報告快速追蹤問題

開發 前端
Diagnostic report 是 Node.js v14.x 提供的一個穩定功能,在某些情況下會生成一個 JSON 格式的診斷報告,可用于開發、測試、生產環境。報告會提供有價值的信息,包括:JavaScript 和本機堆棧信息、堆統計信息、平臺信息、資源使用情況等,幫助用戶快速追蹤問題。

[[376545]]

Diagnostic report 是 Node.js v14.x 提供的一個穩定功能,在某些情況下會生成一個 JSON 格式的診斷報告,可用于開發、測試、生產環境。報告會提供有價值的信息,包括:JavaScript 和本機堆棧信息、堆統計信息、平臺信息、資源使用情況等,幫助用戶快速追蹤問題。

生成診斷報告

提供了多種觸發診斷報告的時機,包括:API 調用的方式觸發、針對未捕獲的異常觸發、用戶信號觸發、致命錯誤導致應用程序終止觸發。

API 觸發

調用 writeReport() 方法,會立即生成一份診斷報告,該方法可以寫在僅當你需要診斷報告時調用,以獲取所需的信息。

  1. const process = require('process'); 
  2. process.report.writeReport(); 

報告默認目錄:Node.js 進程當前工作目錄報告默認名稱:YYYYMMDD.HHMMSS.PID.SEQUENCE.txt

未捕獲錯誤觸發

當程序遇到未捕獲錯誤時主動觸發,需要在啟動服務時加上 --report-uncaught-exception 標志,例如:node --report-uncaught-exception app.js

  1. // app.js 
  2. throw new Error('testerror'

信號觸發

正在運行的 Node.js 進程在接收到特定的信號后生成診斷報告,默認的信號為 -SIGUSR2,同樣在啟動服務時加上 --report-on-signal 標志。

  1. // app.js 
  2. console.log(`process id: ${process.pid}`) 
  3. setInterval(() => {}, 1000); 

啟動服務 node --report-on-signal app.js 之后觸發信號 kill -SIGUSR2 55800 會看到如下信息:

  1. process id: 3512 
  2. Writing Node.js report to file: report.20210113.211250.3512.0.001.json 
  3. Node.js report completed 

基于信號的報告生成,目前 Windows 系統是不支持的。通常無需修改觸發報告的信號,如果 -SIGUSR2 信號已用途其它用途,可通過 --report-signal 標志修改,例如在啟動服務時這樣執行:node --report-on-signal --report-signal SIGPIPE app.js

致命錯誤導致應用程序終止觸發

在啟動服務時上 --report-on-fatalerror 標志,當程序發生一些致命錯誤,例如內存泄漏、Node.js 運行時的內部錯誤等也會觸發生成診斷報告。以下是一個觸發內存泄漏的例子:

  1. const format = bytes => (bytes / 1024 / 1024).toFixed(2) + ' MB'
  2. const print = () => { 
  3.   const memoryUsage = process.memoryUsage(); 
  4.   console.log(`heapTotal: ${format(memoryUsage.heapTotal)}, heapUsed: ${format(memoryUsage.heapUsed)}`); 
  5. const total = []; 
  6. setInterval(() => { 
  7.   total.push(new Array(20, 1024, 1024)); 
  8.   print(); 
  9. }, 1000) 

用例分析

事件循環計時器(timer)句柄信息

以下代碼就是每 10 秒中程序執行一次,你可以通過上面講的信號的方式在啟動之后獲取診斷報告。

  1. console.log(process id: ${process.pid}) 
  2. setInterval(() => {}, 1000 * 10); 

診斷報告會有很多信息,我們要看 timer 的信息,定時器屬于事件循環的階段之一,所以定位到 libuv 這個數組里,以下報告則展示其句柄信息 is_active 就是活動的,firesInMsFromNow 是該計時器的觸發還需要多長時間,當前示例大約還要 9 秒多執行。

  1. "libuv": [ 
  2.   { 
  3.     "type""timer"
  4.     "is_active"true
  5.     "is_referenced"true
  6.     "address""0x0000000105804100"
  7.     "repeat": 0, 
  8.     "firesInMsFromNow": 9067, 
  9.     "expired"false 
  10.   } 

參考:Easily identify problems in Node.js applications with Diagnostic Report

診斷工具(report-toolkit)

report-toolkit 是 IBM 開發的一款工具,用于簡化 Node.js 的診斷報告的使用,使用它在某些情況下可幫助我們快速定位問題。首先全局安裝它,如下命令,之后會生成一個全局的可執行命令 rtk

  1. npm install report-toolkit --global 

inspect 命令

inspect 命令用于自動發現 Node.js 診斷報告中的潛在問題,如果檢測出問題會輸出一條信息,可能是警告。

  1. const format = function (bytes) { 
  2.   return (bytes / 1024 / 1024).toFixed(2) + ' MB'
  3. }; 
  4. const print = function() { 
  5.   const memoryUsage = process.memoryUsage(); 
  6.   console.log(`heapTotal: ${format(memoryUsage.heapTotal)}, heapUsed: ${format(memoryUsage.heapUsed)}`); 
  7. const total = []; 
  8. setInterval(function() { 
  9.   total.push(new Array(20 * 1024 * 1024)); // 大內存占用 
  10.   print(); 
  11. }, 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

 

 

責任編輯:武曉燕 來源: Nodejs技術棧
相關推薦

2021-07-26 05:24:59

Node.js SO_RESUEPORLibuv

2021-07-30 11:20:53

JavaScriptNode.jsWeb Develop

2016-08-25 21:28:04

前端node截圖

2021-01-27 08:05:55

本地存儲HTTP

2020-08-05 08:31:51

SSL TLSNode.js

2021-01-26 08:07:44

Node.js模塊 Async

2021-08-24 05:00:21

Nodejs線程

2021-07-03 17:43:03

Node.jsNode變量

2014-03-07 13:43:32

Node.jsNode

2022-08-28 16:30:34

Node.jsDocker指令

2021-08-20 16:05:28

JavaScript node.js 應用安全

2022-01-11 17:23:12

配置Node.jsNode

2013-11-01 09:34:56

Node.js技術

2015-03-10 10:59:18

Node.js開發指南基礎介紹

2023-01-10 14:11:26

2022-01-02 06:55:08

Node.js ObjectWrapAddon

2017-04-10 13:28:32

Node.jsJavaScript

2020-12-08 06:28:47

Node.js異步迭代器

2021-07-16 04:56:03

NodejsAddon

2021-03-03 06:39:05

Nodejs前端開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕一区二区三区四区五区 | 亚洲午夜在线 | 全免费a级毛片免费看视频免费下 | www成人免费视频 | 久久综合九色综合欧美狠狠 | 亚洲在线一区二区 | 日本一区二区高清不卡 | 天天躁天天操 | 亚洲男人天堂 | 久久精品亚洲欧美日韩精品中文字幕 | 欧美高清视频一区 | 亚洲精品视频免费看 | 国产精品视频免费观看 | 国产一区免费 | 色网在线观看 | 久久久99国产精品免费 | 69电影网| av资源在线看 | 日本网站免费观看 | 在线免费观看黄色av | 免费久久网站 | 91国产在线视频在线 | 日韩色综合 | 成人精品一区二区三区四区 | 天堂中文资源在线 | 国产成人综合久久 | 中文在线一区二区 | 精国产品一区二区三区四季综 | 中文字幕av一区二区三区 | 一区二区三区视频免费观看 | 久久久蜜桃一区二区人 | 久久久久国产精品 | 国产午夜精品一区二区三区嫩草 | 欧美精品啪啪 | 91精品久久久久久久久久 | 午夜精品久久久久久久 | 视频一区二区中文字幕 | 看一级黄色毛片 | 九九九久久国产免费 | 久久成人久久 | 一区二区三区亚洲 |