使用golang的pprof包監控程式
golang提供pprof包,可以監控golang程式的堆疊,cpu的耗時等效能資訊。下邊就說一下這個pprof包的使用。
1、引入
在兩個地方可以引入: “net/http/pprof” “runtime/prof” 其中"net/http/pprof"是用“runtime/pprof” 包裝了一下,然後再http埠暴露出來,讓我們可以再瀏覽器檢視程式的效能分析。“runtime/pprof”可以生成*.pprof的檔案,然後根據這個檔案做效能分析.
2、在程式碼中使用pprof了,實際運用中分三種情況
1)、如果程式本身就是web伺服器,那麼只需要通過程式碼: import( _“net/http/pprof” ) ,將pprof引入,然後在瀏覽器訪問http://localhost:port/debug/pprof/就能看到當前web服務的狀態,包括CPU佔用情況和記憶體使用情況等
2)如果你的go程式不是web伺服器,而是一個服務程序,那麼你就需要開啟一個goroutine來開啟埠監聽。 比如: go func() { log.Println(http.ListenAndServe(“localhost:6060”, nil)) }() 同樣的訪問http://localhost:6060/debug/pprof就可以檢視程式執行的資訊。
3)如果你的程式只是一個應用程式,那麼你就需要使用“runtime/ppprof”包了。 官網給出的程式碼是這樣的:
var cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") func main() { flag.Parse() if *cpuprofile != "" { f, err := os.Create(*cpuprofile) if err != nil { log.Fatal(err) } pprof.StartCPUProfile(f) defer pprof.StopCPUProfile() }
,然後我們在執行這個程式的時候加上一個引數–cpuprofile=*.prof就可以再對應目錄下生成一個.pprof的檔案,程式執行的資訊就都在這個檔案裡了。然後進入對應目錄,執行命令:go tool pprof 加剛才生成的pprof檔案命即可進入到pprof中,輸入web命令,可以生成對應的svg檔案。
第二種方式:
再使用“net/http/pprof”包的時候,我們同樣可以使用go tool pprof命令來檢視程式執行的情況。例如我們啟動了一個簡單的go伺服器程式,監聽再8080埠,那麼我們就可以使用以下命令進入pprof的命令列:
利用這個命令檢視堆疊資訊:
go tool pprof