码迷,mamicode.com
首页 > 编程语言 > 详细

使用linux perf工具生成java程序火焰图

时间:2017-09-02 19:12:13      阅读:452      评论:0      收藏:0      [点我收藏+]

标签:margin   使用   分类   get   tmp   xxx   root   inux   image   

重要参考文献:www.brendangregg.com/blog/2017-06-30/package-flame-graph.html

Java FlameGraph(火焰图)能够非常直观的展示java程序的性能分析结果,方便发现程序热点和进一步调优。本文将展示如何使用linux perf工具生成java程序的火焰图。火焰图大致长这个样子:

技术分享

http://www.brendangregg.com/blog/images/2014/cpu-vertx-flamegraph.svg

火焰图的横轴表示方法耗时百分比,某个方法占用横轴越长表示占用的CPU越多,纵轴表示函数调用关系,顶端表示调用的栈顶。

linux perf是一款linux下强大的性能分析工具。学习请参考:https://www.ibm.com/developerworks/cn/linux/l-cn-perf1/index.html

使用perf工具生成java程序的火焰图只需两步操作,体现在如下命令当中:

# sudo perf record -F 99 -a -- sleep 30; ./jmaps
# sudo perf script | ./pkgsplit-perf.pl | grep java | ./flamegraph.pl > out.svg

第一步使用perf record收集程序运行时的堆栈信息;

第二部使用perf script生成分析结果,最终生成的out.svg文件就是火焰图。


上述命令中还用到了jmapspkgsplit-perf.plflamegraph.pl等脚本,这些脚本分类来自git项目https://github.com/brendangregg/FlameGraph。其中要着重说明的是jmaps脚本,该脚本的作用是获取java程序运行时的符号表,这样在执行perf script时才能生成有意义的堆栈信息,该脚本依赖git项目 https://github.com/jvm-profiling-tools/perf-map-agent,下载该项目成功编译后会在out目录下生成attach-main.jarlibperfmap.so两个文件,这是获取java程序运行时符号表的关键。打开jmaps文件,可以看到如下代码:

AGENT_HOME=${AGENT_HOME:-/usr/lib/jvm/perf-map-agent} # from https://github.com/jvm-profiling-tools/perf-map-agent

需要手动将AGENT_HOME替换为刚才编译后的per-map-agent/out/目录。


问题汇总:

perf-map-agent编译失败

perf-map-agent编译需要cmakeJDK,请现安装好cmakeJDK,并配置好JAVA_HOME


执行./jmaps脚本出错,ERROR: not root user? exiting...

这是因为当前用户不是root, 直接注释掉jmaps脚本中的如下代码即可:

if [[ "$USER" != root ]]; then

     echo "ERROR: not root user? exiting..."

     exit

fi


执行./jmaps脚本出错,chown: changing ownership of ‘/tmp/perf-xxx.map‘: Operation not permitted

jmaps中的代码

if [[ -e "$mapfile" ]]; then

     chown root $mapfile

     chmod 666 $mapfile

else

改为:

if [[ -e "$mapfile" ]]; then

     sudo chown root $mapfile

     sudo chmod 666 $mapfile

else

使用linux perf工具生成java程序火焰图

标签:margin   使用   分类   get   tmp   xxx   root   inux   image   

原文地址:http://www.cnblogs.com/CarpenterLee/p/7467283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!