JAVA看火焰图热点函数async-profiler工具介绍及经验分享

举报
阿奇@汪汪队 发表于 2020/03/06 20:55:30 2020/03/06
【摘要】 介绍java热点采集函数async-profiler编译使用方法及相关经验

一、序

      linux系统上,我们可以使用perf 工具采样数据,然后用火焰图工具生成火焰图。那么Java有没有类似工具呢,那还用说,肯定有啦,很多很多。很多工具比perf简单方便。


BTW,讲一个有趣的事情,考古工作人员(科学家)是用什么工具挖掘文物的呢?盗墓小贼又是用什么工具挖呢?科学家淘宝工具是不是比老百姓的牛X很多呢,


扯远了,回来哈。

二、工具使用async-profiler

async-profiler工具是非常好用采集java函数调用栈的工具,重要的是开源的,可以随便拿过来折腾随便玩。

  1. 下载:去github,最新版本就行了:

    git clone https://github.com/jvm-profiling-tools/async-profiler

  2. 然后就开始编译了,执行make就行了,注意服务器上要安装gcc编译器

    make

  3. 中间过程如果出现没有安装的组件,安装完以后再重新编译就行了。不过,async-profiler编译一般不会遇到什么问题,建议每次使用的时候重新编译一下,免得出现兼容性问题,毕竟make还是很快的。

  4. OK,编译好了,就直接用就是了,执行:

    ./profile.sh

    显示帮助信息。看下example就可以了,常用的都在example里面。

  5. 我们一般用  ./profiler.sh -d 30 -f profile.svg 3456  这个就行了。-d 表示采样时间多少秒, -f是输出到文件,3456是被采样java进程id。

    这里对输出文件,建议命名为XXXX.svg,这个直接可以在浏览器打开,看到火焰图。这也是比较喜欢async-profiler原因之一,不需要再次调用工具生成火焰图。


svg文件直接用浏览器打开(推荐chrome)下面是生成的火焰图:

1583497067582520.png

技巧:1. 双击当前函数可以看到单独以此函数为底的火焰图展开,可以聚焦分析某个函数。怎么看热点耗时多函数,大家都会不用多讲。

1583497521345846.png

2. 对同一个程序运行在不同服务器上进行采样,可以对比出调用差异和性能。

调用差异一般是看同一底函数上面长出不同的分支调用。

对比性能就看同一个函数的采样次数和百分比,注意不一定准确,但是如果大部分函数的变化规律一致的话,就具有参考意义。


好吧,这样去用就是了,很简单的一个工具。。。



三、总结

个人比较喜欢简单好用的工具,大而全的工具往往很难用,安装都搞半天,大部分人都会放弃。

很多工具的实质是一样的,简单好用的最受欢迎,工具掏出什么宝贝,还要看使用工具的人。



回到文章开头,无论是考古工作人员还是盗墓的人,挖掘的工具都会用洛阳铲,基本工具也没有其他更好的高科技的东西。

不过,是科学家挖到的价值多呢,还是盗墓者呢?

还真不好说。。。。

1583498796930447.png

图片来自:https://baike.baidu.com/pic/%E6%B4%9B%E9%98%B3%E9%93%B2/35896/0/359b033b5bb5c9ea21c116a5d639b6003af3b341?fr=lemma&ct=single#aid=0&pic=359b033b5bb5c9ea21c116a5d639b6003af3b341


好了,今天就写这么多了。。。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。