[转帖]Java使用火焰图查看系统瓶颈

java,使用,火焰,查看,系统,瓶颈 · 浏览次数 : 0

小编点评

**步骤 1:监控JVM进程** * 使用 `jps` 获取进程的 ID。 * 使用 `async-profiler` 监控 `profiler.sh` 脚本的执行时间。 **步骤 2:生成火焰图** * 使用 `FlameGraph` 的 `flamegraph.pl` 脚本工具将 `/tmp/test_01.txt` 转换为 SVG 图。 * 将 SVG 图拖放到浏览器中查看。 **工具说明** * `async-profiler`:用于收集和分析 JVM 进程执行时间的工具。 * `FlameGraph`:用于生成火焰图的工具。 **使用步骤** 1. 下载并安装 `async-profiler` 和 `FlameGraph`。 2. 从 GitHub 中下载 `profiler.sh` 和 `flamegraph.pl` 脚本。 3. 将 `profiler.sh` 脚本中的 `${pid}` 替换为 jps 的进程 ID。 4. 将 `flamegraph.pl` 脚本中的 `/tmp/test_01.txt` 替换为 `/tmp/test_01.svg`。 5. 启动 `profiler.sh` 脚本并等待它完成。 6. 启动 `flamegraph.pl` 脚本并指定 `/tmp/test_01.svg`作为输入。 7. 打开浏览器,将 SVG 图显示出来。

正文

场景

一般情况下,我们会对现有系统进行压测等方式,来了解系统最大的吞吐量等等,通过这种方式得知系统在生产环境下可扛住的压力,如果我们想了解在压测的链路过程中,是哪些地方执行时间过长,影响了系统的吞吐量,可以使用火焰图的方式来观察。

工具

生成火焰图需要两个工具:

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

2. FlameGraph:https://github.com/BrendanGregg/FlameGraph

前者用于执行过程中收集耗时数据,后者则是将这些数据渲染成火焰图方便我们查看。

二者都可以在github的Releases地方进行下载。 

使用

使用的过程分为两步,一是监控JVM进程,二是监控完毕,生成火焰图。

1. 监控JVM进程

1. 使用jps获取进程的ID

2. 使用 async-profiler 监控

使用下载下来的软件包中的 profiler.sh 脚本执行下面命令:

./profiler.sh -d 60 -o collapsed -f /tmp/test_01.txt ${pid}

-d表示的是持续收集时长,后面60代表持续采集时间60s

-o表示的是采集规范,这里用的是collapsed

-f后面的路径,表示的是数据采集后生成的数据存放的文件路径(这里放在了/tmp/test_01.txt)

${pid}表示的是采集目标进程的pid,就是jps中的进程ID

2. 生成火焰图

使用 FlameGraph 中的 flamegraph.pl 脚本工具 将 /tmp/test_01.txt 变成 svg 图。

 ./flamegraph.pl /tmp/test_01.txt > /tmp/test_01.svg

这一步生成后,将svg文件拖到浏览器里查看就可以了。

参考:【初探】java性能火焰图的生成 - 胖虎1993 - 博客园

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览84986 人正在系统学习中

与[转帖]Java使用火焰图查看系统瓶颈相似的内容:

[转帖]Java使用火焰图查看系统瓶颈

场景 一般情况下,我们会对现有系统进行压测等方式,来了解系统最大的吞吐量等等,通过这种方式得知系统在生产环境下可扛住的压力,如果我们想了解在压测的链路过程中,是哪些地方执行时间过长,影响了系统的吞吐量,可以使用火焰图的方式来观察。 工具 生成火焰图需要两个工具: 1. async-profiler:

[转帖]netflix火焰圖(profile + 轉為圖像)

本文转载自 ligeforrent 查看原文 2017-06-30 0 file/file/ 运维/运维/ profile/profile/ 图像/图像/ netnet 使用方法:利用google的lightweight-Java-profiler獲取java進程的profile(類hprof格式)

[转帖]java并发-一些系统分析工具

https://segmentfault.com/a/1190000041541631 内存分析 java内存分析一般采用Java jmap dump下系统内存文件,使用 jmat 进行分析。 线程分析 线程栈一般通过 jstack 得到。 cpu分析 火焰图arthas 火焰图做为cpu调试的神器

[转帖]人工智能 Java混合模式火焰图

https://www.dazhuanlan.com/smallnight/topics/1040103 在做性能调优的时候,我们通常会借助一些性能分析工具(比如 perf,DTrace)分析系统资源的使用情况,比如 CPU、内存等,但这些工具分析的结果通常是文本形式,不够直观,不便于快速定位系统瓶

[转帖]人工智能 Java混合模式火焰图

https://www.dazhuanlan.com/smallnight/topics/1040103 在做性能调优的时候,我们通常会借助一些性能分析工具(比如 perf,DTrace)分析系统资源的使用情况,比如 CPU、内存等,但这些工具分析的结果通常是文本形式,不够直观,不便于快速定位系统瓶

[转帖]Java线程的5个使用技巧

https://cloud.tencent.com/developer/article/1179560?from=article.detail.1767994&areaSource=106000.6&traceId=akXSS578NgvCLH6Eiqbla Java线程有哪些不太为人所知的技巧与用

[转帖]Java 认证与授权(JAAS)介绍

https://www.cnblogs.com/wuyongyin/p/16981469.html JAAS(Java Authentication Authorization Service),即 Java 认证与授权,使用可插拔方式将认证与授权服务和应用程序分离开,提供了灵活和可伸缩的机制来保证

[转帖]JAVA 编程规范之建表规约

1、【强制】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是,0 表示否)。 2、【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名

[转帖]JAVA 应用提速之 Large pages「译」

https://zhuanlan.zhihu.com/p/533305428 一、前言 我最近花了很多时间在 JVM 的内存预留代码上。它开始是因为我们得到了外部贡献,以支持在 Linux 上使用多个大小的 large page。为了以一种好的方式做到这一点,必须首先重构一些其他的东西。在沿着 内存

[转帖]JAVA 应用提速之 Large pages「译」

原文链接:https://mp.weixin.qq.com/s/HxT-DXNWkPCyDB6qAgKmXA 一、前言 我最近花了很多时间在 JVM 的内存预留代码上。它开始是因为我们得到了外部贡献,以支持在 Linux 上使用多个大小的 large page。为了以一种好的方式做到这一点,必须首先