【Arthas实战】使用场景与常用命令

简介:

        Arthas是一款Java诊断工具,适用于多种场景,如接口响应变慢、CPU占用过高、热更新需求等。其核心命令包括实时监控面板(dashboard)、线程状态查看(thread)、方法调用链路追踪(trace)、反编译线上代码(jad)、监控方法入参和返回值(watch)、热更新代码(redefine)、方法调用耗时统计(monitor)以及生成火焰图(profiler)。

一、Arthas典型使用场景

  • 日志没报错,但接口响应突然从 50ms 飙升到 5s

  • CPU 占用 100%,但无法快速定位是哪段代码导致的

  • 热更新需求:修复 Bug 后不想重启服务

二、核心命令

1. 实时监控面板:dashboard (查看实时线程、内存、GC状态)

dashboard

2. 定位线程阻塞问题:thread

2.1 查看所有线程状态

thread

 2.2 查看ID线程实际使用

thread ID

2.3 排查CPU占用最高的线程

thread -n 3

2.4 分析死锁

thread -b

3. 追踪方法调用链路:trace

追踪指定方法的调用耗时

trace com.example.service.TestService getUserById

4. 反编译线上代码:jad

jad com.example.controller.TestController

5. 监控方法入参和返回值:watch

监控 getUserById 方法的入参和返回值

watch com.example.service.TestService getUserById "{params, returnObj}" -x 3

6. 热更新代码:redefine(不建议使用)

  • 本地修改源码后编译为 .class 文件
  • 上传到服务器并热加载

redefine /tmp/TestController.class

7. 方法调用耗时统计:monitor

每 60 秒统计一次 getUserById 的调用次数和平均耗时

monitor -c 60 com.example.service.TestService getUserById

8. 生成火焰图(定位性能瓶颈):profiler(需要安装C环境)

profiler startprofiler stop --format html

三、常见案例:

案例 1:CPU 突然飙升至 100%

1.查看 CPU 占用最高的线程

thread -n 1

2.发现线程 ID 888 的堆栈

 "http-nio-8080-exec-1" Id=888 RUNNABLE    at com.example.TestService.calculate(...)

3.反编译查看问题代码

jad com.example.TestService calculate

案例 2:接口响应缓慢

1.追踪方法调用链路

trace com.example.controller.TestController getProfile

2.发现调用数据库查询耗时 2s

trace com.example.TestService findById

3.检查 SQL 是否命中索引

watch com.example.TestService findById "{params[0]}" -x 1

案例 3:NoSuchMethodError

1.检查类加载器是否加载了正确版本

sc -d com.example.TestService

2.重新加载修复后的类

redefine /tmp/TestService.class

四、注意事项

  1. 权限控制:生产环境限制 Arthas 使用权限,避免误操作

  2. 性能影响watch/trace 等命令会增加开销,排查后及时关闭

  3. 安全风险:禁止将 Arthas 暴露在公网环境

五、总结

        个人在使用Arthas觉得可以很好的在短时间找到问题根源,进行方法级性能分析。

   👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

 

### Arthas实战教程使用指南 Arthas 是阿里巴巴开源的一款 Java 诊断工具,能够帮助开发者在线排查 JVM 运行时的各种问题。以下是关于 Arthas 的实际应用案例、学习路径以及一些常见使用的示例。 #### 工具简介 Arthas 提供了一系列强大的命令用于分析和调试运行中的 Java 应用程序。它支持动态查看线程堆栈、方法执行耗时、内存泄漏等问题,而无需重启应用程序或修改代码[^1]。 --- #### 安装启动 安装 Arthas 非常简单,只需通过以下脚本即可完成: ```bash curl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar ``` 运行上述命令后,会列出当前机器上的所有 Java 进程,选择目标进程 ID 即可进入 Arthas 控制台。 --- #### 常见功能应用场景 ##### 1. **线程分析** 当遇到系统卡顿或者响应缓慢的情况时,可以通过 `thread` 命令快速定位阻塞线程。 ```bash thread -n 5 # 查看 CPU 占用最高的前 5 个线程 thread 12345 # 查看指定线程的详细信息 (12345 替换为目标线程 ID) ``` ##### 2. **方法调用追踪** 如果怀疑某个方法存在性能瓶颈,可以使用 `trace` 或 `watch` 来跟踪其内部行为。 ```bash trace com.example.MyService processOrder {} # 跟踪 MyService 类中 processOrder 方法的具体执行过程 watch com.example.MyService processOrder returnObj -x 2 # 打印返回值并展开两层结构 ``` ##### 3. **类加载情况检查** 对于复杂的生产环境,可能需要确认某些类是否被正确加载。此时可以用到 `sc` 和 `sm` 命令。 ```bash sc java.util.HashMap # 搜索 HashMap 是否存在于当前 ClassLoader 中 sm java.util.HashMap put # 显示 HashMap.put 方法签名及相关信息 ``` ##### 4. **内存泄露检测** 利用 `heapdump` 可以生成一份完整的堆转储文件以便进一步离线分析;另外还有专门针对对象实例数量统计的功能——`oj`。 ```bash heapdump /tmp/dump.hprof # 将整个 heap dump 到指定位置 oj java.lang.String # 统计 String 对象的数量及占用空间大小 ``` ##### 5. **实时日志打印** 有时为了临时观察某段业务逻辑的行为而不希望改动源码,则可通过 `monitor` 设置断点式记录输入输出参数。 ```bash monitor -c 3000 com.example.Logger logDebug # 当 Logger.logDebug() 被调用超过三次每秒触发报警提示 ``` --- #### 示例代码片段 假设我们有一个简单的 Spring Boot 应用程序,在其中定义了一个 RESTful API: ```java @RestController public class DemoController { @GetMapping("/test") public String testMethod(@RequestParam(required = false) String param){ try{ Thread.sleep(200); }catch(Exception e){} if ("error".equals(param)){ throw new RuntimeException("Simulated Error"); } return "Success"; } } ``` 现在我们可以借助 Arthas 排查此接口的表现特性: - 使用 `dashboard` 获取整体系统的健康状态概览; - 结合 `jstack` 寻找潜在死锁风险; - 如果发现异常抛出频率过高,则尝试启用 `exception` 插件捕获未处理 Exception 并通知相关人员及时修复。 --- #### 注意事项 尽管 Arthas 功能强大,但在正式环境中仍需谨慎操作以免影响正常服务运转。建议先熟悉官方文档再逐步探索高级选项[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Leo|Java Runner

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

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

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

打赏作者

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

抵扣说明:

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

余额充值