【Linux】perf 火焰图 性能分析利器

 

大部分情况下,在进程级的性能优化,通过查看系统CPU、内存资源等基本都能定位到性能问题,定点解决,但是当你去帮别人做性能排查定位的时候,你不熟悉代码的情况,最快速的就是通过火焰图迅速输出系统调用栈的详细信息,分析出耗时的方法调用。

在JAVA开发过程中,通过visualvm的cpu抽样和内存抽样就可以达到上述效果,CPU抽样的堆栈就可以看出线程的调用关系,最后一层往往都是JDK的api调用,在这个过程中,基本就能定位到自己的哪个方法比较耗时了,但是如果光通过JDK的api还看不出问题,那就需要通过火焰图来看系统调用了,做更深次的性能分析。

安装perf工具

yum install -y perf

perf top -p pid

 

perf常用参数:

    top:动态时实追踪显示占用CPU较高的进程

    record:由于top只能实时查看不能保存,不便于事后分析,用此参数保存追踪的内容,文件名为perf.data

    report:重放perf.data的内容

perf record常用参数:

    -p:指定追踪进程的PID

    -g:启用进程中函数的调用关系(CPU使用超过0.5%时,才会显示调用栈,可以通过man查看)

    -a:追踪所有的CPU的

    sleep N:采集多长时间的数据(如:perf record -ag sleep 10;perf report,直接采集10数据并分析)

 

上述是基本的perf工具使用方法,详情见perf help

如何生成火焰图?

第一步

perf record生成data文件

第二步

perf script -i perf.data &> perf.unfold

第三步

/apprun/FlameGraph/stackcollapse-perf.pl perf.unfold &> perf.folded

(先clone     -->      git clone https://github.com/brendangregg/FlameGraph)

第四步

 /apprun/FlameGraph/flamegraph.pl perf.folded > perf.svg

第五步

sz perf.svg 

通过浏览器打开svg文件

颜色没有特殊含义, 因为火焰图表示的是 CPU 的繁忙程度, 所以一般选择暖色调.

 

 

 

 

 

 

©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页