最好在root权限下执行指令,权限开放情况下才能采集到完整的堆栈信息
perf使用
# 采集信息
sudo perf record -F 99 -p 72448 -g -- sleep 30
perf record 表示采集系统事件,-F 99 表示每秒 99 次, -p 72448 是进程号, 即对哪个进程进行分析, -g 表示记录调用栈, sleep 30 则是持续 30 秒.
sudo perf report -n --stdio
# 生成火焰图
sudo perf script -i perf.data | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg
3.将.svg文件用浏览器打开即可查看火焰图信息
如上所示,即是抓取到的cpu火焰图
火焰图分析
火焰图反映堆栈函数的调用信息,顶端越宽则代表这个函数存在问题更大
all即为程序进程
第二层为main函数处理以及thrift方法的线程池,命名可以在程序中设置
可以查看到thrift每一个线程中mpi_montmul方法占用很多cpu,查找发现为openssl库调用的作为解密所需要的函数,因此无太大优化空间
如果看完觉得有所收获的话,记得点赞关注哦