首頁  >  文章  >  後端開發  >  如何使用golang的pprof套件對程式進行效能分析

如何使用golang的pprof套件對程式進行效能分析

藏色散人
藏色散人轉載
2020-11-25 15:12:022803瀏覽

下面由golang教學欄位來介紹使用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寫過大型的程序,也沒有對這個包真正的用過,只是看了幾篇文章和官網上的一些資料匯總了一下,難免犯形而上學的錯誤,歡迎指正!謝謝

以上是如何使用golang的pprof套件對程式進行效能分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除