Arthas 使用以及火焰图

Arthas是一个强大的Java诊断工具,能够帮助开发者解决类加载问题、在线debug、查看系统运行状况和JVM状态。本文介绍了Arthas的快速入门,包括启动待监控服务、Arthas的启动方式以及如何生成和分析火焰图,以定位应用性能瓶颈。
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

Arthas(阿尔萨斯)能为你做什么?

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?
  8. 怎样直接从 JVM 内查找某个类的实例?

快速入门

Arthas 下载地址

1、 启动 待监控jar服务

2、启动 arthas

在命令行下面执行(使用和目标进程一致的用户启动,否则可能 attach 失败):

  
生成火焰进行性能分析通常涉及以下几个步骤: 1. **安装 Arthas**: Arthas 是阿里巴巴开源的一款 Java 诊断工具,可以通过以下命令安装: ```bash curl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar ``` 运行上述命令后,按照提示选择需要连接的 Java 进程即可进入 Arthas 的交互界面 [^1]。 2. **采集性能数据**: 在 Arthas 中,可以使用 `profiler` 命令来采集性能数据。`profiler` 命令基于 `asyncProfiler` 实现,支持 CPU 和内存的性能数据采集。例如,采集 CPU 性能数据的命令如下: ```bash profiler start -e cpu ``` 该命令会启动 CPU 性能采集。采集的时间可以通过 `-d` 参数指定,例如采集 30 秒的性能数据: ```bash profiler start -e cpu -d 30 ``` 采集完成后,Arthas 会自动生成一个火焰文件(通常是 `flamegraph.svg`) [^2]。 3. **查看火焰**: 生成的火焰文件可以通过浏览器直接打开,查看函数调用的层次结构和时间分布。火焰中的每个矩形块代表一个函数,矩形块的宽度表示该函数占用的 CPU 时间比例。通过分析这些矩形块的分布,可以快速定位性能瓶颈 [^1]。 4. **停止采集**: 如果需要手动停止采集,可以使用以下命令: ```bash profiler stop ``` 该命令会停止当前的性能采集,并生成火焰文件 [^2]。 ### 性能分析 火焰可以帮助开发人员快速定位应用程序中的性能瓶颈和热点。通过分析火焰,可以识别出哪些函数占用了大量的 CPU 时间,进而优化这些函数以提高应用的响应速度和整体性能 [^1]。 例如,如果某个函数在火焰中占据较大的宽度,说明该函数可能是性能瓶颈。此时,可以进一步分析该函数的实现,查找是否有不必要的计算或可以优化的地方。 ### 示例代码 以下是一个简单的 Java 应用示例,用于演示如何使用 Arthas 生成火焰: ```java public class PerformanceTest { public static void main(String[] args) { while (true) { // 模拟 CPU 密集型操作 for (int i = 0; i < 1000000; i++) { Math.sqrt(i); } } } } ``` 运行该应用后,使用 Arthas 连接该进程并采集 CPU 性能数据,生成火焰进行分析 [^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望星空@脚踏实地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值