1. 程式人生 > >使用golang的pprof包監控程式

使用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

http://localhost:6060/debug/pprof/heap 利用這個命令可以檢視程式CPU使用情況資訊: go tool pprof http://localhost:6060/debug/pprof/profile 使用這個命令可以檢視block資訊: go tool pprof http://localhost:6060/debug/pprof/block 進入pprof命令列,輸入help,檢視命令幫助, topN命令可以檢視佔用前N 的執行緒或者函式,用svg可以生成svg圖。 pprof簡單使用就是這樣了,掌握了使用方法,在實踐中加以利用才是我們的目的,希望我寫的這些可以對你有所幫助、 ps;因為我並沒有真正的用golang寫過大型的程式,也沒有對這個包真正的用過,只是看了幾篇文章和官網上的一些資料彙總了一下,難免犯形而上學的錯誤,歡迎指正!謝謝 !