開篇
編寫好了golang服務(wù)之后刨啸,接著要開始關(guān)注服務(wù)的CPU,內(nèi)存使用情況港庄。golang提供了性能剖析工具,記錄一些自己搜集到的信息恕曲,寫下一些實踐的情況鹏氧。在golang中內(nèi)置了pprof工具,專門來做golang語言的優(yōu)化佩谣。
PProf 關(guān)注的模塊
- CPU profile:報告程序的 CPU 使用情況把还,按照一定頻率去采集應(yīng)用程序在 CPU 和寄存器上面的數(shù)據(jù)
- Memory Profile(Heap Profile):報告程序的內(nèi)存使用情況
- Block Profiling:報告 goroutines 不在運行狀態(tài)的情況,可以用來分析和查找死鎖等性能瓶頸
- Goroutine Profiling:報告 goroutines 的使用情況茸俭,有哪些 goroutine吊履,它們的調(diào)用關(guān)系是怎樣的
嘗試
在代碼中添加這些內(nèi)容
import (
...
"runtime"
"runtime/pprof"
...
)
var cpuprofile string = "./YZSvr.prof"
f, err := os.Create(cpuprofile)
if err != nil {
logrus.Warn(err.Error())
}
列名 | 含義 |
---|---|
flat | 函數(shù)執(zhí)行消耗時間 |
flat% | flat占CPU總時間的比例。程序總耗時 |
sum% | 前面每一行的flat占比總和 |
cum | 累計量 |
cum% | cum占用總時間的比例 |
(pprof) top10
Showing nodes accounting for 7.47s, 73.60% of 10.15s total
Dropped 136 nodes (cum <= 0.05s)
Showing top 10 nodes out of 53
flat flat% sum% cum cum%
5.93s 58.42% 58.42% 5.98s 58.92% runtime.stdcall1
0.33s 3.25% 61.67% 2.04s 20.10% runtime.timerproc
0.30s 2.96% 64.63% 0.30s 2.96% runtime.stdcall2
0.23s 2.27% 66.90% 0.23s 2.27% runtime.casgstatus
0.14s 1.38% 68.28% 0.47s 4.63% runtime.schedule
0.14s 1.38% 69.66% 7.10s 69.95% runtime.systemstack
0.12s 1.18% 70.84% 0.13s 1.28% runtime.(*mcache).prepareForSweep
0.10s 0.99% 71.82% 0.19s 1.87% octopus.com/octserver/YZSvr/yz_db.(*SYzDb).GetResult
生成的svg圖片
(pprof) callgrind
Generating report in profile010.callgraph.out
安裝:
go get -u github.com/google/pprof
直接使用pprof生成火焰圖调鬓,在web里面查看:
go tool pprof YZSvr.exe YZSvr.prof
可以通過修改環(huán)境變量直接修改程序里面的線程數(shù)目艇炎;
export GOMAXPROCS=30