备忘录类型文章,后续的修改会更新在我的个人站点,地址: https://pengrl.com/p/570
开启web方式
1 2 3 4 5 6 7
| import _ "net/http/pprof"
import "net/http" http.ListenAndServe("0.0.0.0:10001", nil)
|
通过http接口获取prof输出文件
1 2 3 4 5
| $go tool pprof http://127.0.0.1:10001/debug/pprof/profile # 30-second CPU profile $go tool pprof http://127.0.0.1:10001/debug/pprof/heap $go tool pprof http://127.0.0.1:10001/debug/pprof/block $go tool pprof http://127.0.0.1:10001/debug/pprof/goroutine $go tool pprof http://127.0.0.1:10001/debug/pprof/mutex
|
特定信息获取
1 2 3 4 5 6
| (pprof) help (pprof) top10 (pprof) pdf (pprof) web (pprof) web <func name> (pprof) list <func name>
|
通过web页面访问prof结果
1 2 3 4
| http://127.0.0.1:10001/debug/pprof/
http://127.0.0.1:10001/debug/pprof/goroutine?debug=1 http://127.0.0.1:10001/debug/pprof/goroutine?debug=2
|
分析trace
1 2
| $wget -O trace.out http://127.0.0.1:10001/debug/pprof/trace $go tool trace trace.out
|
火焰图
Go 1.10版本开始将火焰图功能从google/pprof中集成到了go tool pprof中。
所以按Go版本的不同有两种方式可供选择。
1 2 3 4 5 6 7 8
| # 1. Go 1.10之后的版本 $ go tool pprof -http=:10002 http://127.0.0.1:10001/debug/pprof/profile
# 2. Go 1.10之前的版本 $go get -u github.com/google/pprof $wget http://127.0.0.1:10001/debug/pprof/profile $pprof -http=:10002 profile # 用浏览器访问 http://localhost:10002/ui/flamegraph
|
mem相关字段说明
1 2 3 4 5 6 7 8 9
| TODO 这部分内容待整理
Alloc 应用层持有的。和HeapAlloc字段相同 TotalAlloc 只会增长 HeapAlloc 应用持有的,以及GC还没有归还给OS的? HeapIdle GC持有的空闲的 HeapReleased 归还给OS的 Mallocs Frees
|
手动添加pprof开始结束代码,生成prof输出文件
1 2 3 4 5 6 7
| f, err := os.Create("demo.prof") pprof.StartCPUProfile(f) defer pprof.StopCPUProfile()
f, err := os.Create("demo.mprof") pprof.WriteHeapProfile(f) f.Close()
|
加载输出的pprof文件
1 2 3 4 5
| $go tool pprof demo demo.prof $go tool pprof demo demo.mprof $go tool pprof --alloc_space demo demo.mprof $go tool pprof --alloc_objects demo demo.mprof $go tool pprof --inuse_objects demo demo.mprof
|
参考链接
本文完,作者yoko,尊重劳动人民成果,转载请注明原文出处: https://pengrl.com/p/570/