top命令可以查看cpu使用情况的前几名

list 函数名 可以查看函数的cpu使用情况

最后一列为函数名称,其他各项内容意义如下:

flat:当前函数占用CPU的耗时

flat%:当前函数占用CPU的耗时百分比

sum%:函数占用CPU的累积耗时百分比

cum:当前函数+调用当前函数的占用CPU总耗时

cum%: 当前函数+调用当前函数的占用CPU总耗时百分比

例如:

(pprof) top10

Total: 2525 samples

298 11.8% 11.8% 345 13.7% runtime.mapaccess1_fast64

268 10.6% 22.4% 2124 84.1% main.FindLoops

251 9.9% 32.4% 451 17.9% scanblock

178 7.0% 39.4% 351 13.9% hash_insert

131 5.2% 44.6% 158 6.3% sweepspan

119 4.7% 49.3% 350 13.9% main.DFS

96 3.8% 53.1% 98 3.9% flushptrbuf

95 3.8% 56.9% 95 3.8% runtime.aeshash64

95 3.8% 60.6% 101 4.0% runtime.settype_flush

88 3.5% 64.1% 988 39.1% runtime.mallocgc

开启 CPU profiling 后,Golang 程序在 1 秒钟会停顿 100 次,每次停顿都会记录 1 个样本。上例中,前两列表示运行的函数的样本数量(the number of samples in which the function was running)和占总样本数的百分比,例如说 runtime.mapaccess1_fast64 函数在 298 次采样中(占总采样数量的 11.8%)正在运行。第三列表示前几行样本数量总和占总样本数的百分比(第二行 22.4% 为 11.8% + 10.6%)。第四、五列表示出现的函数的样本数量(the number of samples in which the function appeared)和占总样本数的百分比,这里“出现的函数”指的是在采样中正在运行或者等待某个被调用函数返回的函数,换句话就是采样中那些位于调用栈上的函数。我们可以使用 -cum(cumulative 的缩写)flag 来以第四、五列为标准排序。需要注意的是,每次采样只会包括最底下的 100 个栈帧(stack frames)。

参考文章:

https://blog.csdn.net/qq_28119741/article/details/109711641

https://blog.csdn.net/bravezhe/article/details/81747237