Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Arthas profiler(使用async-profiler对应用采样,生成火焰图)

Arthas profiler(使用async-profiler对应用采样,生成火焰图)

原创
作者头像
刘大猫
发布于 2025-04-13 01:42:04
发布于 2025-04-13 01:42:04
1830
举报
文章被收录于专栏:JAVA相关JAVA相关

@toc

二、命令列表

2.4 profiler(使用async-profiler对应用采样,生成火焰图)

使用场景:

profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

提示

使用async-profiler在新窗口打开生成火焰图

火焰图的含义:

火焰图是基于 perf 结果产生的SVG 图片,用来展示 CPU 的调用栈。

y 轴表示调用栈,每一层都是一个函数。调用栈越深,火焰就越高,顶部就是正在执行的函数,下方都是它的父函数。

x 轴表示抽样数,如果一个函数在 x 轴占据的宽度越宽,就表示它被抽到的次数多,即执行的时间长。注意,x 轴不代表时间,而是所有的调用栈合并后,按字母顺序排列的。

火焰图就是看顶层的哪个函数占据的宽度最大。只要有"平顶"(plateaus),就表示该函数可能存在性能问题。

颜色没有特殊含义,因为火焰图表示的是 CPU 的繁忙程度,所以一般选择暖色调。

注意:生成的火焰图要从linux服务器下载到本地然后才能打开,而不是浏览器直接输入IP:端口去打开,那样无效。

profiler 命令支持生成应用热点的火焰图。本质上是通过不断的采样,然后把收集到的采样结果生成火焰图。

代码语言:java
AI代码解释
复制
profiler 命令基本运行结构是: 
profiler action [actionArg]

profiler 命令的格式基本与上游项目 async-profiler在新窗口打开 保持一致,详细的使用方式可参考上游项目的 README、Github Disscussions 以及其他文档资料。

参数说明:

参数名称

参数说明

action

要执行的操作

actionArg

属性名模式

i:

采样间隔(单位:ns)(默认值:10'000'000,即 10 ms)

f:

将输出转储到指定路径

d:

运行评测指定秒

e:

要跟踪哪个事件(cpu, alloc, lock, cache-misses 等),默认是 cpu

常用命令:

profiler

命令作用

profiler start

启动profiler,默认情况下,生成cpu的火焰图

profiler list

显示所有支持的事件

profiler getSamples

获取已采集的sample的数量

profiler status

查看profiler的状态,运行的时间

profiler stop

停止profiler,生成火焰图的结果,指定输出目录和输出格式:svg或html

启动profiler,默认情况下,生成的是 cpu 的火焰图,即 event 为cpu。可以用event`参数指定其他性能分析模式,见下文。

代码语言:java
AI代码解释
复制
  $ profiler start
  Started [cpu] profiling

显示支持的事件

代码语言:java
AI代码解释
复制
  profiler list

获取已采集的sample的数量

代码语言:java
AI代码解释
复制
  $ profiler getSamples
  23

查看profiler状态(可以查看当前profiler在采样哪种event和采样时间。)

代码语言:java
AI代码解释
复制
  $ profiler status
  [cpu] profiling is running for 4 seconds

停止profiler,并同步生成文件(默认在工作目录下的arthas-output目录。)

代码语言:java
AI代码解释
复制
  $ profiler stop
  profiler output file: /tmp/demo/arthas-output/20240919-155147.svg

通过 --file参数来指定输出结果路径,在--file参数指定的文件名后缀为 htmljfr 时,文件格式可以被推断出来。比如--file /tmp/result.html 将自动生成火焰图。

代码语言:java
AI代码解释
复制
  # 指定生成的文件名以及路径
  profiler stop --file /tmp/result.svg

可以用--format指定生成格式,默认情况下,结果是 Flame Graph格式的 html 文件,也可以用 -o--format 参数指定其他内容格式,包括 flat、traces、collapsed、flamegraph、tree、jfr。

代码语言:java
AI代码解释
复制
  profiler stop --format html

生成的图

profiler 支持的 events

在不同的平台,不同的 OS 下面,支持的 events 各有不同。比如在 macos 下面:

代码语言:java
AI代码解释
复制
$ profiler list
Basic events:
  cpu
  alloc
  lock
  wall
  itimer

在 linux 下面

代码语言:java
AI代码解释
复制
$ profiler list
Basic events:
  cpu
  alloc
  lock
  wall
  itimer
Java method calls:
  ClassName.methodName
Perf events:
  page-faults
  context-switches
  cycles
  instructions
  cache-references
  cache-misses
  branch-instructions
  branch-misses
  bus-cycles
  L1-dcache-load-misses
  LLC-load-misses
  dTLB-load-misses
  rNNN
  pmu/event-descriptor/
  mem:breakpoint
  trace:tracepoint
  kprobe:func
  uprobe:path

如果遇到 OS 本身的权限/配置问题,然后缺少部分 event,可以参考 async-profiler 的文档在新窗口打开

可以使用 check action 测试某个 event 是否可用,此 action 的参数格式与 start 一致。

可以用--event参数指定要采样的事件,比如 alloc 表示分析内存分配情况:

代码语言:java
AI代码解释
复制
$ profiler start --event alloc

本人其他相关文章链接

1.Arthas 全攻略:让调试变得简单

2.Arthas dashboard(当前系统的实时数据面板)

3.Arthas thread(查看当前JVM的线程堆栈信息)

4.Arthas jvm(查看当前JVM的信息)

5.Arthas sysprop(查看和修改JVM的系统属性)

6.Arthas sysenv(查看JVM的环境变量)

7.Arthas vmoption(查看和修改 JVM里诊断相关的option)

8.Arthas getstatic(查看类的静态属性 )

9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)

10.Arthas logger(查看 logger 信息,更新 logger level)

11.Arthas mbean(查看 Mbean 的信息)

12.Arthas memory(查看 JVM 内存信息)

13.Arthas ognl(执行ognl表达式)

14.Arthas perfcounter(查看当前 JVM 的 Perf Counter 信息)

15.Arthas vmtool(从 jvm 里查询对象,执行 forceGc)

16.Arthas jad(字节码文件反编译成源代码 )

17.Arthas mc(Memory Compiler/内存编译器 )

18.Arthas redefine(加载外部的.class文件,redefine到JVM里 )

19.Arthas classloader (查看 classloader 的继承树,urls,类加载信息)

20.Arthas sc(查看JVM已加载的类信息 )

21.Arthas sm(查看已加载类的方法信息 )

22.Arthas monitor(方法执行监控)

23.Arthas stack (输出当前方法被调用的调用路径)

24.Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)

25.Arthas tt(方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测)

26.Arthas watch (方法执行数据观测)

27.Arthas profiler(使用async-profiler对应用采样,生成火焰图)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下
如果你经常遇到 Java 线上性能问题束手无策,看着线上服务 CPU 飙升一筹莫展,发现内存不断泄露满脸茫然。别慌,这里有一款低开销、自带火焰图、让你大呼好用的 Java 性能分析工具 - async-profiler。
未读代码
2019/12/16
15K0
超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下
cpu分析利器 — async-profiler
async-profiler是一款采集分析java性能的工具,翻译一下github上的项目介绍:
龟仙老人
2020/12/15
3.3K0
使用火焰图进行Java性能分析
内核维护着各种统计信息,被称为Counters,用于对事件进行计数。例如,接收的网络数据包数量,发出的磁盘I/O请求,执行的系统调用次数。常见的这类工具有:
mazhen
2023/11/24
1.3K0
使用火焰图进行Java性能分析
JVM CPU Profiler技术原理及源码深度解析
研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能瓶颈。Profiling技术是一种在应用运行时收集程序相关信息的动态分析手段,常用的JVM Profiler可以从多个方面对程序进行动态分析,如CPU、Memory、Thread、Classes、GC等,其中CPU Profiling的应用最为广泛。
美团技术团队
2019/10/12
1.2K0
JVM CPU Profiler技术原理及源码深度解析
Arthas redefine(加载外部的.class文件,redefine到JVM里 )
使用mc命令来编译jad的反编译的代码有可能失败。可以在本地修改代码,编译好后再上传到服务器上。有的服务器不允许直接上传文件,可以使用base64命令来绕过。
刘大猫
2025/04/27
550
Arthas classloader (查看 classloader 的继承树,urls,类加载信息)
9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
刘大猫
2025/04/25
880
Arthas monitor(方法执行监控)
对匹配 class-pattern/method-pattern/condition-express的类、方法的调用进行监控。
刘大猫
2025/04/22
810
性能优化|火焰图篇
上篇文章写完后,性能调优|成都核酸系统篇 收到了一些夸赞,让我有继续写下去的动力;
用户5166556
2023/03/18
1.1K0
性能优化|火焰图篇
【Arthas】实战教程
最近团队在研究线上问题排查方式,发现线上存在CPU飙升问题,测试环境无法复现,查阅资料发现 Arthas 能够分析此类问题。
后端码匠
2023/11/05
6630
Arthas stack (输出当前方法被调用的调用路径)
这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。
刘大猫
2025/04/21
1220
Arthas watch (方法执行数据观测)
9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
刘大猫
2025/04/17
760
Arthas memory(查看 JVM 内存信息)
9.Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)
刘大猫
2025/04/26
1130
C++ 之 perf+火焰图分析与调试
在遇到一些内存异常的时候,经常这部分的代码是很难去进行分析的,最近了解到Perf这个神器,这里也展开介绍一下如何使用Perf以及如何去画火焰图。
芯动大师
2024/09/10
1780
C++ 之 perf+火焰图分析与调试
Arthas sc(查看JVM已加载的类信息 )
答案:getstatic 命令用于获取特定类的静态字段的值,而 sc 命令可以一次性显示一个类的所有静态字段及其值。这使得 sc 更适合快速查看类的整体状态。
刘大猫
2025/04/24
1130
perf和火焰图使用方法
perf是linux上的性能分析工具,perf可以对event进行统计得到event的发生次数,或者对event进行采样,得到每次event发生时的相关数据(cpu、进程id、运行栈等),利用这些数据来对程序性能进行分析。
嵌入式与Linux那些事
2023/03/24
3.9K0
perf和火焰图使用方法
Java 诊断工具 Arthas 常见命令使用和实战(排查函数调用异常、热更新、调用方法函数、查看堆栈调用等)
云原生这么多微服务,当然需要一个诊断利器来排查问题。 Arthas 是阿里开源的 Java 诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪 Java 代码;实时监控 JVM 状态。Arthas 支持 JDK 6+,支持 Linux/Mac/Windows,采用命令行交互模式,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。
共饮一杯无
2022/11/28
3.5K0
Java 诊断工具 Arthas 常见命令使用和实战(排查函数调用异常、热更新、调用方法函数、查看堆栈调用等)
实战Arthas:常见命令与最佳实践
当涉及到 Java 应用程序的诊断和调优时,Arthas 是一款备受推崇的开源工具,无论是线上问题的定位,还是实时性能监控和分析,Arthas 都能为您提供强大的支持。
BookSea
2024/01/23
1.2K0
实战Arthas:常见命令与最佳实践
Alibaba开源Java诊断工具Arthas简单介绍
Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。在线排查问题,无需重启;动态跟踪Java代码;实时监控JVM状态。
yuanfan2012
2020/07/23
9370
Alibaba开源Java诊断工具Arthas简单介绍
Arthas trace (方法内部调用路径,并输出方法路径上的每个节点上耗时)
trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。
刘大猫
2025/04/20
1620
干货分享!JAVA诊断工具Arthas在Rainbond上实践~
别再担心线上 Java 业务出问题怎么办了,Arthas 帮助你解决以下常见问题:
Rainbond开源
2022/09/08
8450
推荐阅读
相关推荐
超好用的自带火焰图的 Java 性能分析工具 Async-profiler 了解一下
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档