Golang火焰圖

清遠qingyuan發表於2019-08-02

火焰圖

火焰圖(Flame Graph)是 Bredan Gregg 建立的一種效能分析圖表,因為它的樣子近似火而得名。上面的 profiling 結果也轉換成火焰圖。Uber開源工具 go-torch可以直接讀取 golang profiling 資料,並生成一個火焰圖的 svg 檔案。

使用火焰圖之前,需要安裝如下工具:

1 原生 PProf 工具

go get github.com/google/pprof

需要將產生的pprof可執行程式所在路徑新增到環境變數中。

用法

pprof -http=:8080 cpu.prof

2 安裝FlameGraph

git clone https://github.com/brendangregg/FlameGraph.git

將FlameGraph所在路徑新增到環境變數中。

export PATH=$PATH:$GOPATH/FlameGraph

3 安裝graphviz

graphviz 用於繪圖

CentOS:

yum install graphviz

Ubuntu

sudo apt-get install graphviz

4 安裝go-torch

安裝go-torch用於採集資料,生產火焰圖。

go get github.com/uber/go-torch

需要將產生的pprof可執行程式所在路徑新增到環境變數中。

go-torch 工具的使用非常簡單,沒有任何引數的話,它會嘗試從 http://localhost:8080/debug/pprof/profile 獲取 profiling 資料。它有三個常用的引數可以調整:

-u --url:要訪問的 URL,這裡只是主機和埠部分
-s --suffix:pprof profile 的路徑,預設為 /debug/pprof/profile
-t --seconds:要執行 profiling 的時間長度,預設為 30s

火焰圖 svg 檔案可以通過瀏覽器開啟,它對於呼叫圖的最優點是它是動態的:可以通過點選每個方塊來 zoom in 分析它上面的內容。

火焰圖的呼叫順序從下到上,每個方塊代表一個函式,它上面一層表示這個函式會呼叫哪些函式,方塊的大小代表了佔用 CPU 使用的長短,火焰圖的配色並沒有特殊的意義。

5 結果

執行程式(監聽於9090埠),輸入如下指令

go-torch -u http://localhost:9090 -t 30

隨後在執行go-torch的目錄下會生成torch.svg檔案,通過瀏覽器開啟,如下:
在這裡插入圖片描述
點選圖中的任意部分,可以看到更詳細資訊:在這裡插入圖片描述
備註:
在Windows下安裝同樣方式操作時,會有如下錯誤:

could not generate flame graph: fork/exec F:\Pr
ogramTest\Golang\src\github.com\FlameGraph\flamegraph.pl: %1 is not a valid Win32 application.

問題原因是windows不能直接執行pl檔案。pl檔案是perl檔案,於是安裝perl,並且將路徑新增到環境變數中。依然報錯。因為windows直接可執行的是exe檔案。可能需要將下載的flamegraph進行編譯,然後進行安裝。或者直接下載flamegraph可執行程式,並進行安裝。這部分後面完善。
​​
掃描二維碼,關注“清遠的夢囈”公眾號,手機端檢視文章

 掃描二維碼,關注“清遠的夢囈”公眾號,手機端檢視文章

相關文章