日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Go -- pprof协程监控

發(fā)布時(shí)間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go -- pprof协程监控 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

go中有pprof包來(lái)做代碼的性能監(jiān)控,在兩個(gè)地方有包:

net/http/pprof

runtime/pprof

其實(shí)net/http/pprof中只是使用runtime/pprof包來(lái)進(jìn)行封裝了一下,并在http端口上暴露出來(lái)

pprof包

web 服務(wù)器

如果你的go程序是用http包啟動(dòng)的web服務(wù)器,你想查看自己的web服務(wù)器的狀態(tài)。這個(gè)時(shí)候就可以選擇net/http/pprof。你只需要引入包_"net/http/pprof",然后就可以在瀏覽器中使用http://localhost:port/debug/pprof/直接看到當(dāng)前web服務(wù)的狀態(tài),包括CPU占用情況和內(nèi)存使用情況等。具體使用情況你可以看godoc的說(shuō)明。

服務(wù)進(jìn)程

如果你的go程序不是web服務(wù)器,而是一個(gè)服務(wù)進(jìn)程,那么你也可以選擇使用net/http/pprof包,同樣引入包net/http/pprof,然后在開啟另外一個(gè)goroutine來(lái)開啟端口監(jiān)聽。

比如:

go func() {log.Println(http.ListenAndServe("localhost:6060", nil))

}()

應(yīng)用程序

如果你的go程序只是一個(gè)應(yīng)用程序,比如計(jì)算fabonacci數(shù)列,那么你就不能使用net/http/pprof包了,你就需要使用到runtime/pprof。具體做法就是用到pprof.StartCPUProfile和pprof.StopCPUProfile。比如下面的例子:

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()
}

運(yùn)行程序的時(shí)候加一個(gè)--cpuprofile參數(shù),比如fabonacci --cpuprofile=fabonacci.prof

這樣程序運(yùn)行的時(shí)候的cpu信息就會(huì)記錄到XXX.prof中了。

下一步就可以使用這個(gè)prof信息做出性能分析圖了(需要安裝graphviz)。

使用go tool pprof (應(yīng)用程序) (應(yīng)用程序的prof文件)

進(jìn)入到pprof,使用web命令就會(huì)在/tmp下生成svg文件,svg文件是可以在瀏覽器下看的。像這個(gè)樣子:

如果你的程序非常簡(jiǎn)單,比如只有println一個(gè)語(yǔ)句,你用pprof.StartCPUProfile是打印不出任何東西的。

舉例

下面拿go-tour舉個(gè)例子,這是個(gè)web程序,我在代碼中加入了

_ "net/http/pprof"

在瀏覽器中我就可以直接看prof信息了

生成CPU狀態(tài)分析圖

下面我們想要生成CPU狀態(tài)分析圖,調(diào)用go tool pprof http://localhost:3999/debug/pprof/profile

就會(huì)進(jìn)入30秒的profile收集時(shí)間,在這段事件內(nèi)猛刷新點(diǎn)擊go-tour瀏覽器上的頁(yè)面,盡量讓cpu占用性能產(chǎn)生數(shù)據(jù)。

(pprof) top10

Total: 3 samples

?????? 1 33.3% 33.3% 1 33.3% MHeap_AllocLocked

?????? 1 33.3% 66.7% 1 33.3% os/exec.(*Cmd).closeDescriptors

?????? 1 33.3% 100.0% 1 33.3% runtime.sigprocmask

?????? 0 0.0% 100.0% 1 33.3% MCentral_Grow

?????? 0 0.0% 100.0% 2 66.7% main.Compile

?????? 0 0.0% 100.0% 2 66.7% main.compile

?????? 0 0.0% 100.0% 2 66.7% main.run

?????? 0 0.0% 100.0% 1 33.3% makeslice1

?????? 0 0.0% 100.0% 2 66.7% net/http.(*ServeMux).ServeHTTP

?????? 0 0.0% 100.0% 2 66.7% net/http.(*conn).serve

?

(pprof)web

參考

http://blog.golang.org/2011/06/profiling-go-programs.html

這篇官方文章說(shuō)得很仔細(xì)了,但是要注意,將里面的gopprof工具換成go tool pprof就行了

轉(zhuǎn)載于:https://www.cnblogs.com/mafeng/p/7323812.html

總結(jié)

以上是生活随笔為你收集整理的Go -- pprof协程监控的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。