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

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

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

# sudoperf record -F 99 -a -- sleep 30; ./jmaps

# sudoperf script | ./pkgsplit-perf.pl | grep java | ./flamegraph.pl > out.svg

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

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

上述命令中还用到了jmaps、pkgsplit-perf.pl、flamegraph.pl等脚本,这些脚本分类来自git项目https://github.com/brendangregg/FlameGraph。其中要着重说明的是jmaps脚本,该脚本的作用是获取java程序运行时的符号表,这样在执行perf

script时才能生成有意义的堆栈信息,该脚本依赖git项目https://github.com/jvm-profiling-tools/perf-map-agent,下载该项目成功编译后会在out目录下生成attach-main.jar和libperfmap.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编译需要cmake和JDK,请现安装好cmake和JDK,并配置好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

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

java火焰_使用linux perf工具生成java程序火焰图相关推荐

  1. 服务器如何运行java文件_在linux服务器上运行java文件

    1.  在windows环境下编写java类,如java类是Test类. 2.  将该Test类上传到linux服务器上,命令如下: mapred@10:/bwdata168_2/hyg$rz  -b ...

  2. aixs1 生成java代码_通过axis1.4 来生成java客户端代码

    1.首先下载axis-1.4所有的jar包, 2.我是直接打开cmd,进入到该jar包的目录下, 3.直接运行命令(运行这个命令之前要确定java的环境变量都已配置好): java -Djava.ex ...

  3. linux系统分析工具续-SystemTap和火焰图(Flame Graph)

    本文为网上各位大神文章的综合简单实践篇,参考文章较多,有些总结性东西,自认暂无法详细写出,建议读文中列出的参考文档,相信会受益颇多.下面开始吧(本文出自 "cclo的博客" 博客, ...

  4. oxygen 生成java对象_利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析...

    首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!) ...

  5. java 报表_市占率第一的Java报表工具 - FineReport报表工具

    作为国产Java报表工具的优秀代表,FineReport报表工具不仅仅在报表设计的简单易用上表现出极大的优势,更在数据分析等复杂报表处理能力和报表管理等报表综合应用上凸显出其报表技术的成熟和领先. 一 ...

  6. 第三方工具监控java进程_前9个免费的Java进程监视工具以及如何选择一种

    第三方工具监控java进程 这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 当您做好工作后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是进行调试和应用 ...

  7. ant java 返回_使用Ant自动化我们的java项目生成

    现在我们已经了解如何定义属性.依赖关系以及如何运行ant,接下来我们将学习怎样使用ant编译java源代码并生成jar文件. 编译源代码 由于Ant的主要目标就是生成java应用程序,它内置了java ...

  8. linux多线程_免费Linux下载工具,你还不知道?

    今天小编要跟大家分享的文章是关于Linux运维人员应该知道的免费Linux下载工具.Windows用户在想要使用下载管理器时可以享受很多选择.如Download Accelerator Plus和Re ...

  9. linux中jdk添加字体_在Linux上为Openjdk Java定义/安装字体的位置

    在Ubuntu上安装了Oracle 8 jdk,在jre/lib中它具有各种fontProperties文件和一个包含字体的字体目录.但是,当安装OpenJdk 8时,jre/lib中的字体文件上没有 ...

最新文章

  1. 第六章 MVC之 FileResult和JS请求二进制文件
  2. 《中国人工智能学会通讯》——2.2 智能汽车人机交互与人机协同技术
  3. python abs()函数是什么意思?
  4. 看完这13张图,不得不佩服还是外国人会玩人工智能
  5. mongodb数据库导出备份
  6. mysql的ps.setmaxrows_mysql自定义函数实现表的指定列进行数据脱敏(PS:来自mysql小白的提问)...
  7. Linux上的ffmpeg完全使用指南
  8. 5.7和5.6的mysql_mysql5.6与5.7版本的区别
  9. Java练习题(方法)
  10. VINS_Fusion学习01——官方教程翻译解读
  11. java阿拉伯数字转中文或金钱
  12. 中秋海报设计素材|中秋节海报文案
  13. oracle报错imp报错00008,imp导入时遭遇IMP-00032,IMP-00008错误.
  14. gmail设置双重验证后,第三工具无法登陆解决
  15. 调整Android音量等级及默认音量
  16. [爬虫]字节跳动招聘爬取实战-csrf校验
  17. video output protection内容输出保护技术
  18. 微信朋友圈分享链接的【图片】设置
  19. Win2000服务器设置全攻略电子书
  20. 【python 图像拼接】 微信好友头像下载和拼接技术

热门文章

  1. MSA应用――MSA手册第四版的新亮点
  2. upload靶场第一-二十一关
  3. 通过PPM计算MHz晶振频率偏差和32.768KHz晶振计时公式
  4. ant-design-vue 时间选择器a-date-picker mode=“year”不生效
  5. 如何导出:swc、swf、fla内的声音文件
  6. shazam音乐检索算法 附完整c代码
  7. JVM笔记(一)走进JVM
  8. 网络安全运维流量攻击分析需要掌握的核心能力有什么
  9. 【实战】物联网安防监控项目【2】———boa服务器的移植
  10. 我取关了100个公众号,却把它们置顶了