這篇文章給大家分享的是有關(guān)怎樣使用golang的pprof包對程序進行性能分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián),為您提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計,對服務(wù)純水機等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗。成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務(wù),我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠(yuǎn)的責(zé)任!golang提供pprof包,可以監(jiān)控golang程序的堆棧,cpu的耗時等性能信息。下邊就說一下這個pprof包的使用。
1,首先是引入,在兩個地方可以引入:
“net/http/pprof” "runtime/prof"
其中"net/http/pprof"是用“runtime/pprof” 包裝了一下,然后再http端口暴露出來,讓我們可以再瀏覽器查看程序的性能分析?!皉untime/pprof”可以生成*.pprof的文件,然后根據(jù)這個文件做性能分析.
2,然后就是在代碼中使用pprof了,實際運用中分三種情況:
1)
如果程序本身就是web服務(wù)器,那么只需要通過代碼:
import( _"net/http/pprof" )
,將pprof引入,然后在瀏覽器訪問http://localhost:port/debug/pprof/就能看到當(dāng)前web服務(wù)的狀態(tài),包括CPU占用情況和內(nèi)存使用情況等
2)
如果你的go程序不是web服務(wù)器,而是一個服務(wù)進程,那么你就需要開啟一個goroutine來開啟端口監(jiān)聽。
比如:
go func() { log.Println(http.ListenAndServe("localhost:6060", nil)) }()
同樣的訪問http://localhost:6060/debug/pprof就可以查看程序運行的信息。
3)如果你的程序只是一個應(yīng)用程序,那么你就需要使用“runtime/ppprof”包了。
官網(wǎng)給出的代碼是這樣的:
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() }
,然后我們在運行這個程序的時候加上一個參數(shù)--cpuprofile=*.prof就可以再對應(yīng)目錄下生成一個.pprof的文件,程序運行的信息就都在這個文件里了。然后進入對應(yīng)目錄,運行命令:go tool pprof 加剛才生成的pprof文件命即可進入到pprof中,輸入web命令,可以生成對應(yīng)的svg文件。
第二種方式:
再使用“net/http/pprof”包的時候,我們同樣可以使用go tool pprof命令來查看程序運行的情況。例如我們啟動了一個簡單的go服務(wù)器程序,監(jiān)聽再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 的線程或者函數(shù),用svg可以生成svg圖。 pprof簡單使用就是這樣了,掌握了使用方法,在實踐中加以利用才是我們的目的,希望我寫的這些可以對你有所幫助。
感謝各位的閱讀!關(guān)于怎樣使用golang的pprof包對程序進行性能分析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!