下面由golang教學欄位來介紹使用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中文網其他相關文章!