使用 Linux Perf

Linux Perf 提供了低級別的 CPU 分析功能,包括 JavaScript、原生和作業系統級別的堆疊幀。

重要提示:本教程僅適用於 Linux。

操作方法

Linux Perf 通常可以透過 linux-tools-common 包獲得。透過 --perf-basic-prof--perf-basic-prof-only-functions,我們能夠啟動支援 perf_events 的 Node.js 應用程式。

--perf-basic-prof 將始終寫入一個檔案(/tmp/perf-PID.map),這可能導致磁碟無限增長。如果擔心這個問題,可以使用模組 linux-perf--perf-basic-prof-only-functions

兩者之間的主要區別在於 --perf-basic-prof-only-functions 產生的輸出較少,是生產環境分析的可行選項。

# Launch the application an get the PID
$ node --perf-basic-prof-only-functions index.js &
[1] 3870

然後根據所需的頻率記錄事件

$ sudo perf record -F 99 -p 3870 -g

在此階段,你可能需要對應用程式進行負載測試,以生成更多記錄,從而進行可靠的分析。當任務完成時,透過向命令傳送 SIGINT(Ctrl-C)來關閉 perf 程序。

perf 將在 /tmp 資料夾內生成一個檔案,通常名為 /tmp/perf-PID.map(在上述示例中為 /tmp/perf-3870.map),其中包含每個被呼叫函式的跟蹤資訊。

要將這些結果聚合到一個特定檔案中,請執行

$ sudo perf script > perfs.out

原始輸出可能有點難以理解,因此通常使用原始檔案生成火焰圖以便更好地視覺化。

Example nodejs flamegraph

要從此結果生成火焰圖,請從第 6 步開始遵循本教程

由於 perf 輸出不是 Node.js 特定的工具,它可能在處理 Node.js 中 JavaScript 程式碼的最佳化方式時遇到問題。請參閱perf 輸出問題以獲取更多參考。

閱讀時間
2 分鐘
貢獻
編輯此頁面
目錄
  1. 操作方法
  2. 實用連結