Java性能分析之火焰图

  1. 火焰图来了
  2. 从GitHub上clone下来async-profiler

火焰图来了

Java性能分析火焰图是什么?

  1. java性能分析火焰图的所做的事情就是能够分析出java程序运行期间存在的性能问题,因为某段代码拖慢整个程序执行是不允许的,因此靠火焰图的绘制和分析就可以找出类似的“问题代码段”。

  2. 那么这个图是怎么来的呢?首先跟大多数监控系统一样,数据采集+前端绘图,这个图也是根据某些数据绘制而成的,绘图工具本篇文章采用FlameGraph,而负责收集这些数据的工具,这里采用async-profiler,这个工具会在程序运行期间向jvm发送信号采集其运行期数据(简单来说就是通过该工具可以找出程序中占用CPU资源时间最长的代码块,这里async-profiler的实现使用了jvmti,然后生成相应的数据格式文件,而FlameGraph则负责读取和解析数据文件生成对应的火焰图(svg文件)。

从GitHub上clone下来async-profiler

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

这里使用mac演示

可以新建一个工程,编写Target.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.File;

public class Target {
private static volatile int value;
private static void method1() {
for (int i = 0; i < 1000000; ++i) {
++value;
}
}

private static void method2() {
for (int i = 0; i < 1000000; ++i) {
++value;
}
}

private static void method3() throws Exception {
for (int i = 0; i < 1000; ++i) {
for (String s : new File("/tmp").list()) {
value += s.hashCode();
}
}
}

public static void main(String[] args) throws Exception {
while (true) {
method1();
method2();
method3();
}
}
}

打开终端:输入jps

输入命令,回车

生成svg

选择谷歌浏览器打开

生成火焰图

接下来就可以慢慢进行性能分析了


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1210331079@qq.com

💰

Title:Java性能分析之火焰图

Count:446

Author:千 羽

Created At:2020-09-03, 23:14:47

Updated At:2020-09-06, 15:02:54

Url:https://nateshao.github.io/2020/09/03/Java%E6%80%A7%E8%83%BD%E5%88%86%E6%9E%90%E4%B9%8B%E7%81%AB%E7%84%B0%E5%9B%BE/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

×

donation.headline

// 底部音乐
//右上角Github图标