[譯] Go 可視化效能分析工具

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

原文: A Short Survey of PProf Visualization Tools by Jordan Crabtree。

調試CPU相關的問題經常會涉及關於趨勢的微妙問題。堆使用的峰值是否逐漸的增長? routine在什麼地方被調用,調用的頻度如何?

一圖勝千言。
一張圖片就可以提供很多有用的上下文資訊,否則如果用語言解釋起來累的半死。將pprof可視化顯示可以將有用的CPU統計資料與整個時間的上下文關聯起來。

pprof 是什嗎?

PProf是一個CPU分析器( cpu profiler), 它是gperftools工具的一個組件, 由Google工程師為分析多線程的程式所開發。
Go標準庫中的pprof package通過HTTP的方式為pprof工具提供資料。
(譯者註:不止這個包,runtime/pprof還可以為控制台程式或者測試程式產生pprof資料)

既然pprof資料通過HTTP提供,所以它需要在你的應用中運行一個web伺服器。可以通過 import pprof的副作用(這裡副作用 side-effect 是指引入這個包讓其初始化,不是貶義詞), 這個包就可以在預設的web伺服器中註冊它的handler,並補需要其它額外的操作。

下面是一個使用pprof長時間啟動並執行例子:

1234567891011
import ("log""net/http"_ "net/http/pprof")func main(){go func() {log.Println(http.ListenAndServe("localhost:6060", nil))}()...

使用 pprof

pprof能夠藉助grapgviz產生程式的調用圖。預設情況下pprof基於對程式的30秒採樣產生調用圖。

  • 圖中的連線代表對方法的調用, 連線上的標籤代表指定的方法調用的採樣值(譯者註:go tool pprof顯示的是調用時間)。
  • 方框的大小與方法啟動並執行採樣值的大小有關。
  • 每個方框由兩個標籤:一個是方法啟動並執行時間佔比,一個是它在採樣的堆棧中出現的時間佔比(譯者註: 前者你可以看成flat時間,後者看成cumulate時間)。

在Mac上安裝工具:

12
$ brew install gperftools$ brew install graphviz
1
$ pprof --web localhost:6060/debug

譯者注
我並沒有使用上面的工具,因為Go開發環境已經整合了pprof工具,所以你不需要安裝gperftools工具,而且使用的命令和上面的命令不一樣。
當然graphviz是必裝的。

你可以通過下面的命令採集30s的資料並產生SVG調用圖:

1
go tool pprof -web http://10.75.25.126:9091/debug/pprof/profile

go-torch

go-torch是uber開發的一個工具,使用效能分析的專家Brendan Gregg (譯者註:口口相傳的效能分析的工具圖就是來自他, 效能之巔一書的作者。看他的網站可以學到很多效能相關的知識)的指令碼產生火焰圖。

和pprof一樣,它也採用30秒的採樣資料產生火焰圖。

  • 棧幀(Stack frame,調用鏈)垂直堆疊,顯示棧的深度
  • 幀的寬度代表一個方法的啟動並執行時間佔比
  • 如果一個方法被調用者調用,它會顯示多次,分列在不同的調用者的堆棧上。(譯者註:這點和pprof工具不同,pprof至顯示一個方法的框,上面的時間標籤是所有的調用者調用的時間)
  • 顏色是任意的(arbitrary), 橫座標根據字母順序排列

安裝
需要安裝go-torch工具和brandangregg的火焰圖產生指令碼:

123
$ go get github.com/uber/go-torch$ git clone git@github.com:brendangregg/FlameGraph.git$ export PATH-$PATH:/path/to/FlameGraph
1
go-torch --file "torch.svg" --url http://localhost:6060

GOM

gom是一個即時的 curses-風格的命令列工具,由Google的工程師Jaana Dogan開發。

  • 可以顯示啟動並執行goroutine和機器線程數
  • 即時更新
  • 出現可視化,gom還提供了基於文本的CPU和heap的資料
1
$ go get github.com/rakyll/gom/cmd/gom

通過 import gom, gom同樣可以註冊額外的handler在預設的伺服器上,就像pprof一樣。

123
import (_ "github.com/rakyll/gom/http")
1
$ gom --target http://localhost:6060

Debug charts

Debug charts是由Marko Kevac開發的一個工具,使用plotly.js庫來為啟動並執行程式建立一個可視化的web視圖。

  • 運行在瀏覽器中
  • 可視化gc pause,記憶體配置和cpu佔用等資訊
  • 即時更新

通過import debugcharts,可以為預設的web伺服器註冊額外的handler,就像pprof、gom一樣。

123
import (_ "github.com/mkevac/debugcharts")

然後訪問 localhost:6060/debug/charts就可以顯示相關的即時效能圖表了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.