91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Node.js中怎么快速了解出錯的問題

發布時間:2021-07-20 11:26:31 來源:億速云 閱讀:233 作者:chen 欄目:web開發

本篇內容介紹了“在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中怎么快速了解出錯的問題”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浪卡子县| 扶沟县| 北票市| 乳源| 张家川| 蒙城县| 瓦房店市| 青浦区| 县级市| 和田县| 张家川| 洛川县| 赞皇县| 白水县| 德格县| 茶陵县| 鹤岗市| 云龙县| 五大连池市| 延吉市| 卫辉市| 蕉岭县| 柏乡县| 大厂| 托克逊县| 晋江市| 海淀区| 嘉义市| 兰州市| 六盘水市| 金阳县| 枣庄市| 武邑县| 道真| 雷山县| 岳西县| 延川县| 金门县| 布尔津县| 扎兰屯市| 西和县|