java性能火焰图的生成实践
更新时间:2025年07月10日 16:13:13 作者:运维打怪晋级之路
文章介绍async-profiler这一Java性能分析工具,可低开销生成火焰图,帮助定位CPU飙升、内存泄露等问题,涵盖准备程序、生成数据及展示三个核心步骤,适合解决线上性能瓶颈
序言
如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然。
别慌,这里有一款低开销、自带火焰图、让你大呼好用的 Java 性能分析工具 - async-profiler。
1、准备程序
[root@localhost ~]# git clone git://github.com/jvm-profiling-tools/async-profiler
[root@localhost async-profiler]# yum -y install gcc+ gcc-c++
[root@localhost async-profiler]# make
[root@localhost ~]# more Test.java
public class Test {
public static void main(String[] args) throws Exception {
Test test = new Test();
while (true) {
test.func1();
test.func2();
test.func3();
}
}
public void func1() throws Exception { //调用第一个方法,需要100ms
Thread.sleep(100L);
}
public void func2() throws Exception { //调用第二个方法,需要500ms
Thread.sleep(500L);
}
public void func3() throws Exception { //调用第三个方法,需要1500ms
Thread.sleep(1500L);
}
}
[root@localhost ~]#
[root@localhost ~]# javac Test.java
[root@localhost ~]# java Test
生成火焰图数据
root 21765 7152 0 18:29 pts/1 00:00:00 java Test root 21799 21777 0 18:29 pts/0 00:00:00 grep --color=auto java [root@localhost ~]# cd async-profiler/ [root@localhost async-profiler]# [root@localhost async-profiler]# ./profiler.sh -d 60 -o collapsed -f /tmp/test_01.txt 21765 Profiling for 60 seconds Done [root@localhost async-profiler]# cd .. [root@localhost ~]# ls anaconda-ks.cfg a.out async-profiler FlameGraph jdk-8u121-linux-x64.tar.gz perf.data process.svg test.c Test.class Test.java [root@localhost ~]# cd FlameGraph/ [root@localhost FlameGraph]# perl flamegraph.pl --colors=java /tmp/test_01.txt > test_01.svg [root@localhost FlameGraph]# ls aix-perf.pl example-perf-stacks.txt.gz README.md stackcollapse-instruments.pl stackcollapse-pmc.pl test demos example-perf.svg record-test.sh stackcollapse-java-exceptions.pl stackcollapse-recursive.pl test_01.svg dev files.pl stackcollapse-aix.pl stackcollapse-jstack.pl stackcollapse-sample.awk test.sh difffolded.pl flamegraph.pl stackcollapse-bpftrace.pl stackcollapse-ljp.awk stackcollapse-stap.pl docs jmaps stackcollapse-elfutils.pl stackcollapse-perf.pl stackcollapse-vsprof.pl example-dtrace-stacks.txt pkgsplit-perf.pl stackcollapse-gdb.pl stackcollapse-perf-sched.awk stackcollapse-vtune.pl example-dtrace.svg range-perf.pl stackcollapse-go.pl stackcollapse.pl stackcollapse-xdebug.php [root@localhost FlameGraph]# sz test_01.svg
3、展示

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot整合Liquibase实现对数据库管理和迁移
Liquibase是一个用于用于跟踪、管理和应用数据库变化的开源工具,通过日志文件(changelog)的形式记录数据库的变更(changeset),然后执行日志文件中的修改,将数据库更新或回滚(rollback)到一致的状态,本文主要介绍SpringBoot与Liquibase的集成,需要的朋友可以参考下2024-11-11
SpringBoot整合Mybatis实现多数据源配置与跨数据源事务实例
开发中经常有这样的需要: 读写分离。微服务环境下可以实现一个服务读取一个数据库,另一个服务写库。但是在实际应用中有时也需要在一个服务中读写不同的数据库。可以在一个SpringBoot单体项目中配置多个数据源解决读写库分离2022-11-11
Spring学习笔记1之IOC详解尽量使用注解以及java代码
这篇文章主要介绍了Spring学习笔记1之IOC详解尽量使用注解以及java代码 的相关资料,需要的朋友可以参考下2016-07-07
java.lang.OutOfMemoryError: Metaspace异常解决的方法
这篇文章主要介绍了java.lang.OutOfMemoryError: Metaspace异常解决的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-03-03


最新评论