使用linux perf工具生成java程序火焰图
重要参考文献:
www.brendangregg.com/blog/2017-06-30/package-flame-graph.html
www.brendangregg.com/blog/2014-06-12/java-flame-graphs.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
http://www.brendangregg.com/perf.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文件就是火焰图。
上述命令中还用到了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
jmaps只能获取正在执行的java程序的符号表
使用jmaps获取java程序的符号表,仅限于正在运行的Java程序,一种情况是perf record时要监测的java程序还在运行,但等到执jmaps脚本时程序已经结束,则符号表获取会失败。
使用linux perf工具生成java程序火焰图的更多相关文章
- linux系统分析工具续-SystemTap和火焰图(Flame Graph)
本文为网上各位大神文章的综合简单实践篇,参考文章较多,有些总结性东西,自认暂无法详细写出,建议读文中列出的参考文档,相信会受益颇多.下面开始吧(本文出自 “cclo的博客” 博客,请务必保留此出处ht ...
- 【初探】java性能火焰图的生成
前言 开始之前,你需要准备的环境: Linux系统机器或者虚拟机一台,里面需要安装的软件:git.jdk.perl. 简单介绍: java性能分析火焰图的所做的事情就是能够分析出java程序运行期间存 ...
- install4j 工具为java程序打包exe
用 install4j 工具为java程序打包exe 制作人:mark 制作时间:2013-05-02 用Eclipse 将程序源码打包成jar文件. 打包jar方法我不做介绍了,相信大家都会,不会的 ...
- 不错的linux下通用的java程序启动脚本
不错的linux下通用的java程序启动脚本(转载) 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包也必须要修改起动shell. 在网上找到一个挺好的 ...
- 使用web3j工具生成java版本的智能合约
这里需要使用的环境 web3j,nodejs 安装编译sol工具 $ npm install -g solc 保存为hello.sol文件到本地 pragma solidity 0.4.19; con ...
- jstack来分析。当linux出现cpu被java程序消耗过高时
我们使用jdk自带的jstack来分析.当linux出现cpu被java程序消耗过高时,以下过程说不定可以帮上你的忙: 1.top查找出哪个进程消耗的cpu高 21125 co_ad2 18 ...
- Linux上如何执行java程序
想要在Ubuntu上运行java程序,可以将java程序编译成功后打包,然后在Ubuntu上用命令执行jar文件 具体操作如下: 1.Windows上使用eclipse编译java工程,编译完成后导出 ...
- 不错的linux下通用的java程序启动脚本(转载)
转自:http://www.cnblogs.com/langtianya/p/4164151.html 虽然写起动shell的频率非常不高...但是每次要写都要对付一大堆的jar文件路径,新加jar包 ...
- 利用JConsole工具监控java程序内存和JVM
一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29.218:7070/training/ 部署的应用服务器为tomcat6.028 启动tomcat服 ...
随机推荐
- centos7 简单搭建lnmp环境
1:查看环境: 1 2 [root@10-4-14-168 html]# cat /etc/redhat-release CentOS release 6.5 (Final) 2:关掉防火墙 1 [r ...
- Dubbo源码学习--服务发布(DubboProtocol、Exporter)
在Dubbo服务发布的整体流程一文中,只是分析了服务发布的整体流程,具体的细节还没有进一步分析.本节将继续分析服务暴露的过程.在ServiceConfig中通过一句话即可暴露服务,如下: Export ...
- 【NOI2005】维护数列
https://daniu.luogu.org/problem/show?pid=2042 一道伸展树维护数列的很悲伤的题目,共要维护两个标记和两个数列信息,为了维护MAX-SUM还要维护从左端开始的 ...
- MEAN 全栈开发 ——实现简单博客
最近在学习MEAN全栈开发的过程中,写了一个小程序就当练练手熟悉一下怎么去组合强大的功能. 废话不多说,直接上文件预览: 整体文件结构: 其中,public文件夹存放了img,js,css文件,其中的 ...
- AspNet Core 初步认识
Core 的出现对我我没有很大的影响,当时在Core要发布的时候听到周围的人再聊再谈,我没有去太多关注,就是一个屌丝开发人员. 直到又一次偶然见到一位特别喜欢.net的老开发人员谈起Core时落泪了, ...
- C语言中的typedef
说明: ******使用typedefkeyword定义新的数据类型. ***如:typedef unsigned short U16.在定义变量时.unsigned short a和U16 a ...
- 入门Webpack
---恢复内容开始--- 什么是WebPack,为什么要使用它? 为什要使用WebPack 现今的很多网页其实可以看做是功能丰富的应用,它们拥有着复杂的JavaScript代码和一大堆依赖包.为了简化 ...
- 自学Zabbix3.10.1.3-事件通知Notifications upon events-媒介类型Jabber
自学Zabbix3.10.1.3-事件通知Notifications upon events-媒介类型Jabber Jabber有第三方插件,能让Jabber用户和MSN.YahooMessager. ...
- 《程序设计实践》【PDF】下载
<程序设计实践>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196319 内容简介 本书从排错.测试.性能.可移植性.设计.界面. ...
- 53、css补充
css其余问题补充 一.默认的高度和宽度问题 1.父子都是块级元素 <!DOCTYPE html> <html> <head> <title>...&l ...