Go語言生態系統提供了一種非常簡便的方法來對應用程序進行監控。
本文將介紹一個由Dave Cheney提供的包,通過在main()
函數中添加一行代碼,可以非常容易地對程序進行調試。
開始你的Go CPU監控
步驟 1:下載github.com/pkg/profile
運行以下命令:
go get github.com/pkg/profile
步驟 2:將監控功能添加到main()
函數中
在你的代碼中加入以下的import語句:
package main
import (
//...
"github.com/pkg/profile"
)
func main() {
// 預設啟動CPU監控
defer profile.Start().Stop()
//...
}
步驟 3:編譯並運行你的程序
這將在臨時文件夾中生成一個*.pprof
文件,並告訴你它的位置(稍後會需要):
2017/08/03 14:26:28 profile: cpu profiling enabled, /var/...../cpu.pprof
步驟 4:如果尚未安裝graphviz,請先安裝該軟件
它用於生成pdf格式的圖形。在Mac上只需運行brew install graphviz
命令。其他平台的安裝方法請參考https://www.graphviz.org。
步驟 5:運行go tool pprof
使用你的二進制文件位置和cpu.pprof
文件的位置作為參數運行以下命令即可。你可以生成不同格式的分析報告,其中PDF格式的報告效果非常好:
go tool pprof --pdf ~/go/bin/yourbinary /var/path/to/cpu.pprof > file.pdf
你還可以生成其他類型的可視化報告,例如txt
報告:
go tool pprof --txt ~/go/bin/yourbinary /var/path/to/cpu.pprof > file.txt
內存監控
內存監控與CPU監控基本相同,只需要在profile.Start()
的默認配置上傳遞profile.MemProfile
標誌即可:
defer profile.Start(profile.MemProfile).Stop()
代碼如下:
package main
import (
//...
"github.com/pkg/profile"
)
func main() {
// 內存監控
defer profile.Start(profile.MemProfile).Stop()
//...
}
運行程序時,它將生成一個mem.pprof
文件而不是cpu.pprof
文件。
了解更多關於Go程序監控的相關資訊
這只是一個入門的指南。更多資訊請參考以下鏈接:
- https://blog.golang.org/profiling-go-programs
- 更低層次的API文檔:https://golang.org/pkg/runtime/pprof/
- 進階用法的其他選項,請參考
github.com/pkg/profile
的文檔:http://godoc.org/github.com/pkg/profile