Arthas 使用技巧与步骤

1. Arthas 简介

Arthas 是阿里巴巴开源的一款 Java 诊断工具,支持在运行时对 Java 应用进行故障排查和性能分析。

2. 启动 Arthas

2.1 前提条件

  • 目标 Java 应用已启动。(后台至少要有一个java进程才可以使用java -jar命令启动arthas)

  • Arthas 需要连接到正在运行的 Java 进程。

2.2 下载 Arthas

curl -O https://arthas.aliyun.com/arthas-boot.jar

2.3 启动 Arthas

java -jar arthas-boot.jar

启动后,Arthas 会列出当前系统中的 Java 进程,供您选择要连接的进程。

3. 使用 Arthas

连接到目标进程后,您可以使用 Arthas 提供的命令进行诊断,例如:

  • 查看类加载信息:

    sc -d com.example.MyClass
    
  • 查看方法调用堆栈:

    stack com.example.MyClass myMethod
    
  • 监控方法执行时间:

    monitor com.example.MyClass myMethod
    

4. 常用命令总览

4.1 JVM 监控与信息查询

  • jvm:查看当前 JVM 基本信息,包括版本、启动参数等​Arthas

  • memory:展示堆内存、Metaspace 等各区使用情况​Arthas

  • sysprop / sysenv:查看/修改系统属性与环境变量​Arthas

  • vmoption:查看和调整诊断相关的 JVM 参数​Arthas

  • heapdump:生成堆快照,后续可用 jmap 或分析工具离线分析​Arthas

4.2 类与字节码操作

  • sc:搜索并展示已加载类信息,支持通配符​Arthas

  • sm:查看某个类的方法列表及签名​Arthas

  • jad:反编译已加载类源码,帮助线上“看源码”​Arthas

  • dump:将已加载类的字节码导出为 .class 文件​Arthas

  • redefine / retransform:动态更新/转换类字节码,用于热修复​Arthas

4.3 监控与性能分析

  • monitor:统计方法调用的次数、平均耗时、最大耗时等​Arthas

  • trace:展示方法调用链及每层耗时,适用于慢接口排查​Arthas

  • watch:在方法执行前后插桩,实时输出入参、返回值或异常信息​Arthas

  • tt:时空隧道,记录多次调用的入参/出参供比对分析​Arthas

  • profiler:调用 async-profiler 生成火焰图,离线或本地分析热点​Arthas

  • jfr:动态开启/关闭 JDK Flight Recorder 事件采集​Arthas

4.4 线程与堆栈

  • thread:查看当前 JVM 所有线程及其状态​Arthas

  • stack <pid> <method>:输出指定方法的调用堆栈,可定位死锁/阻塞​Arthas

4.5 日志与配置动态调整

  • logger:查看和调整日志级别,无需重启应用​Arthas

  • mbean:查询 JMX MBean 信息,操作应用管理接口​Arthas

4.6 异步任务管理

  • jobs:列出所有后台命令任务及状态​Arthas

  • kill <jobId>:终止指定的异步任务​Arthas

  • fg <jobId> / bg <jobId>:将任务切换到前台/后台​Arthas

5. 场景实战

5.1 慢接口排查

  1. Dashboard:首选“上帝视角”,查看 QPS、RT、错误数、线程池概览等​阿里云开发者社区-云计算社区-阿里云

  2. trace:对于某慢接口 com.example.UserService.findUser,执行:

    trace com.example.UserService findUser

    可看到内部调用链及耗时​Arthas

  3. monitor:统计同一方法调用指标,识别偶发性慢调用​Arthas

5.2 CPU 占用高

  1. tt:记录方法执行时序图,分析热点调用参数差异​Arthas

  2. profiler:在命令行执行 profiler start; sleep 30; profiler stop,生成火焰图定位热点​Arthas

5.3 内存泄漏

  1. memory:初步查看堆使用情况,判断 Old Gen 是否持续增高​Arthas

  2. heapdump:执行 heapdump /tmp/heap.dump,离线通过 MAT 分析对象保留关系​Arthas

5.4 线程阻塞或死锁

  1. thread:查看所有线程状态,识别 BLOCKED/WAITING 线程​Arthas

  2. stack:对可疑线程执行 stack <threadId>,查看调用堆栈​Arthas

5.5 动态热修复

  1. redefine:将补丁类 FixClass.class 注入 JVM:

    redefine /path/to/FixClass.class

    即可完成线上紧急修复,无需重启或发布​Arthas

  2. mc:在命令行内编写 Java 代码并即时加载:

    mc -l com.example.Service -d \"return 42;\" serviceMethod

    适用于轻量修改​Arthas。           

4. 退出与会话管理

  • quit / exit:断开当前客户端会话,不影响其他客户端​Arthas

  • stop:关闭 Arthas 服务端,所有客户端断开且恢复所有增强类​Arthas

  • session:查看当前会话 ID、attach 时间等信息​Arthas

5. 诊断确认

  • 关闭后检测:重新执行 ps -ef | grep arthas,确认 Arthas 进程已退出。

  • 日志文件:Arthas 会在本地生成 arthas.log,可查看 attach/detach 和命令历史​Arthas

6. 关闭 Arthas

在 Arthas 命令行界面中,输入以下命令退出:

exit

这将断开与目标 Java 进程的连接,并关闭 Arthas。

7. 检查 Arthas 是否已启动

您可以通过以下方式检查 Arthas 是否已启动:

  • 查看系统中的 Java 进程:

    ps -ef | grep java
    

    如果看到与 Arthas 相关的进程,说明 Arthas 已启动。

  • 使用 Arthas 提供的 Web 控制台:

    Arthas 启动后,会在本地启动一个 Web 控制台,默认地址为:

    http://127.0.0.1:8563
    

    通过访问该地址,您可以查看 Arthas 的状态和执行命令。

8. 注意事项

  • Arthas 只能连接到当前用户有权限的 Java 进程。

  • 如果目标 Java 应用未启动,Arthas 无法连接。

  • 建议在测试环境中使用 Arthas,避免对生产环境造成影响。

希望以上信息对您有所帮助。如需进一步了解 Arthas 的使用,请参考官方文档或相关教程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值