TFdream / blog

个人技术博客,博文写在 Issues 里。
Apache License 2.0
129 stars 18 forks source link

Async-profiler简介 #367

Open TFdream opened 3 years ago

TFdream commented 3 years ago

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

关于火焰图的使用参考以下两篇文章:

对于java应用,我们可以使用 Async-perf 进行了热点采集。

另外,JFR 作为 JVM 中问题定位的新贵,关于 JFR 的原理和使用,可以参考Java Flight Recorder - 事件机制详解

最后,再配合 Alibaba开源的Java诊断工具 Arthas ,基本上可以快速定位线上各种疑难杂症了。

1、介绍

Async-profiler是一个对系统性能影响很少的Java采样分析器,它的实现是基于HotSpot特有的API,通过这些特有的API收集堆栈跟踪和跟踪内存分配,因而其可以和OpenJDK、Oracle JDK和其他基于HotSpot JVM的Java应用在运行时协同工作。

Github项目链接地址:https://github.com/jvm-profiling-tools/async-profiler

Async-profiler可以跟踪以下类型的事件:

支持的平台

注意:macOS分析仅限于用户空间代码。

2、快速入门

直接在 https://github.com/jvm-profiling-tools/async-profiler#download 下载相应平台的文件包,由于我本人使用的是mac os,故我下载 async-profiler-2.0-macos-x64.tar.gz。

下载完成后解压缩:

$ mkdir -p /opt/async-profiler
$ tar -zxvf async-profiler-2.0-macos-x64.tar.gz -C /opt/async-profiler

解压完成后执行:

$ ./profile.sh

会显示帮助信息,常用的方法 都在官方README 中 Example有介绍。

$ jps
9234 Jps
8983 Computey
$ ./profiler.sh start 8983
$ ./profiler.sh stop 8983

采样一段时间(30秒):

$ ./profiler.sh -d 30 8983

生成火焰图:

$ jps
9234 Jps
8983 Computey
$ ./profiler.sh -d 30 -f /tmp/flamegraph.html 8983

相关资料