使用堆分析器

堆分析器在 V8 之上執行,用於捕獲一段時間內的記憶體分配情況。在本文件中,我們將介紹如何使用以下工具進行記憶體分析:

  1. 分配時間線
  2. 取樣堆分析器

使用堆快照指南中介紹的堆轉儲不同,使用即時分析的目的是為了瞭解一段時間內的記憶體分配情況。

堆分析器 - 分配時間線

堆分析器與取樣堆分析器類似,但它會跟蹤每一次記憶體分配。它的開銷比取樣堆分析器高,因此不建議在生產環境中使用。

您可以使用 @mmarchini/observe 以程式設計方式啟動和停止分析器。

操作方法

啟動應用程式

node --inspect index.js

對於指令碼,--inspect-brk 是一個更好的選擇。

在 Chrome 中連線到開發者工具例項,然後

  • 選擇 Memory(記憶體)選項卡。
  • 選擇 Allocation instrumentation timeline(分配檢測時間線)。
  • 開始分析。

heap profiler tutorial step 1

一旦堆分析開始執行,強烈建議執行一些示例以識別記憶體問題。例如,如果我們正在對一個 Web 應用程式進行堆分析,我們可以使用 Apache Benchmark 來產生負載:

$ ab -n 1000 -c 5 https://:3000

然後,在負載完成後按停止按鈕

heap profiler tutorial step 2

最後,檢視快照資料

heap profiler tutorial step 3

有關記憶體術語的更多資訊,請檢視有用連結部分。

取樣堆分析器

取樣堆分析器可跟蹤一段時間內的記憶體分配模式和預留空間。由於它基於取樣,其開銷足夠低,可以在生產系統中使用。

您可以使用 heap-profiler 模組以程式設計方式啟動和停止堆分析器。

操作方法

啟動應用程式

$ node --inspect index.js

對於指令碼,--inspect-brk 是一個更好的選擇。

連線到開發者工具例項,然後

  1. 選擇 Memory(記憶體)選項卡。
  2. 選擇 Allocation sampling(分配取樣)。
  3. 開始分析。

heap profiler tutorial 4

產生一些負載然後停止分析器。它將根據堆疊跟蹤生成一個包含記憶體分配的摘要。您可以關注那些堆分配較多的函式,請參見下面的示例

heap profiler tutorial 5