Bytehound:一個更強大的 Linux 內存分析工具
簡介
Bytehound 是 Linux 的內存分析工具。它能夠顯示內存變化曲線、佔用詳情、完整的堆棧記錄等信息,有助於解決內存泄漏等問題。詳細功能如下:
-
可用於分析內存泄漏,精確地查看內存消耗的地方,識別臨時分配的內存並檢測內存碎片
-
收集每個申請和釋放內存的操作的信息,跟蹤完整的堆棧信息
-
可以動態剔除臨時分配的內存,可以在很長一段時間內進行分析
-
使用定製的堆棧信息展示實現,這使得它比其他類似工具更高效,在某些情況下可能快幾個數量級
-
可以將採集到的數據導出爲各種不同的格式:可以將數據導出爲 JSON、Heaptrack(可以使用 Heaptrack GUI 進行分析)和火焰圖
-
擁有基於 Web 的 GUI,可用於分析
-
可以將分析數據動態地流式傳輸到另一臺機器,而不是將其保存在本地,這對於在內存受限的系統上進行分析非常有用
-
支持 AMD64、ARM、AArch64 和 MIPS64 架構(其中 MIPS64 需要一個內核補丁 perf_event_open)
-
支持對使用 jemalloc 作爲分配器的應用程序進行分析(僅適用於基於 AMD64 架構的 jemallocator)
-
支持基於 Rhai 的嵌入式 DSL,允許進行編程和自動數據分析
項目地址是:
https://github.com/koute/bytehound
安裝
-
安裝 GCC,Rust 和 Yarn,目的是爲了構建 GUI
-
構建
$ cargo build --release -p bytehound-preload
$ cargo build --release -p bytehound-cli
- 從 target/release/libbytehound.so 或 target/release/bytehound 下獲取二進制文件
用法
基本用法
$ export MEMORY_PROFILER_LOG=warn
$ LD_PRELOAD=./libbytehound.so ./your_application
$ ./bytehound server memory-profiling_*.dat
然後打開瀏覽器訪問 http://localhost:8080。
打開 debug 日誌
出於性能原因,默認情況下分析器在編譯時禁用了大部分調試日誌。如果要啓用 debug 日誌,需要使用 debug-logs 功能進行重新編譯構建:
$ cd preload
$ cargo build --release --features debug-logs
環境變量
Bytehound 分析器是通過很多的環境變量來控制它的行爲的,以下是常用的一些環境變量。
MEMORY_PROFILER_OUTPUT
默認值:memory-profiling_%e_%t_%p.dat,表示數據將寫入的文件的路徑,支持佔位符,這些佔位符將在運行時替換爲以下內容:%p -> 進程的 PID %t -> UNIX 紀元以來的秒數 %e -> 可執行文件的名稱 %n -> 自動遞增計數器(0、1、..、9、10 等)
MEMORY_PROFILER_LOG
要使用的日誌級別;可能的值:trace、debug、info、warn、error
MEMORY_PROFILER_LOGFILE
日誌將寫入的文件的路徑;如果未設置,日誌將被髮送到 stderr,並且支持類似於 MEMORY_PROFILER_OUTPUT(除了 %n)的佔位符。
MEMORY_PROFILER_CULL_TEMPORARY_ALLOCATIONS
默認值:0,當設置爲 1 時,將剔除臨時分配並從輸出中省略它們。如果只關心內存泄漏或想要在幾天內進行長期分析,可以設置爲 1。
MEMORY_PROFILER_PRECISE_TIMESTAMPS
默認值:0,決定何時爲每個事件收集時間戳,或者只爲事件塊收集時間戳。啓用後,時間戳將更加精確,但會增加 CPU 使用率。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/R8qDGvwoZcp6DnkJ274u4w