使用堆分析器
堆分析器在 V8 之上執行,用於捕獲一段時間內的記憶體分配情況。在本文件中,我們將介紹如何使用以下工具進行記憶體分析:
- 分配時間線
- 取樣堆分析器
與使用堆快照指南中介紹的堆轉儲不同,使用即時分析的目的是為了瞭解一段時間內的記憶體分配情況。
堆分析器 - 分配時間線
堆分析器與取樣堆分析器類似,但它會跟蹤每一次記憶體分配。它的開銷比取樣堆分析器高,因此不建議在生產環境中使用。
您可以使用 @mmarchini/observe 以程式設計方式啟動和停止分析器。
操作方法
啟動應用程式
node --inspect index.js
對於指令碼,
--inspect-brk是一個更好的選擇。
在 Chrome 中連線到開發者工具例項,然後
- 選擇
Memory(記憶體)選項卡。 - 選擇
Allocation instrumentation timeline(分配檢測時間線)。 - 開始分析。
![]()
一旦堆分析開始執行,強烈建議執行一些示例以識別記憶體問題。例如,如果我們正在對一個 Web 應用程式進行堆分析,我們可以使用 Apache Benchmark 來產生負載:
$ ab -n 1000 -c 5 https://:3000
然後,在負載完成後按停止按鈕
![]()
最後,檢視快照資料
![]()
有關記憶體術語的更多資訊,請檢視有用連結部分。
取樣堆分析器
取樣堆分析器可跟蹤一段時間內的記憶體分配模式和預留空間。由於它基於取樣,其開銷足夠低,可以在生產系統中使用。
您可以使用
heap-profiler模組以程式設計方式啟動和停止堆分析器。
操作方法
啟動應用程式
$ node --inspect index.js
對於指令碼,
--inspect-brk是一個更好的選擇。
連線到開發者工具例項,然後
- 選擇
Memory(記憶體)選項卡。 - 選擇
Allocation sampling(分配取樣)。 - 開始分析。
![]()
產生一些負載然後停止分析器。它將根據堆疊跟蹤生成一個包含記憶體分配的摘要。您可以關注那些堆分配較多的函式,請參見下面的示例
![]()