先来个实战吧。
某进程CPU使用率非常高,不知道什么原因
使用perf
命令排查
输入命令后,一会就可以Ctrl+c停止掉
# perf record -p 14942 ^C[ perf record: Woken up 5 times to write data ] [ perf record: Captured and wrote 1.396 MB perf.data (36172 samples) ]
分析刚才的数据
输入命令
# perf report
可以看到99.78%的CPU时间片都消耗在这个调用上面
按下回车
再按下回车
看代码貌似:
main函数中执行了demo函数,然后demo函数里面有个for{ } 循环
汇编指令 |
备注 |
inc |
加1 |
cmp |
比较 |
jle |
小于等于 |
xor |
逻辑或非 |
jmp |
无条件转移 |
通过指令,大概可以看出,比较某数字,增加1
来看代码
package main func main() { demo() } func demo(){ for { sum:=0 for i:=0;i<=1000000;i++ { sum+=i } } }
这里只是提供一个demo案例,你也可以使用这种方式找到热点函数