Arthas使用指南:安装与常用命令(trace、watch)详解

Arthas 是阿里开源的Java诊断工具,能在不重启应用的情况下实现线上问题排查、性能监控和动态代码热更新。本文将详细介绍其核心功能与使用技巧。


一、快速安装与启动

bash 复制代码
# 下载最新版Arthas
curl -O https://arthas.aliyun.com/arthas-boot.jar

# 启动并选择目标JVM进程
java -jar arthas-boot.jar

启动后会显示当前机器上的Java进程列表,输入序号即可附加到目标进程进行诊断。


二、性能瓶颈定位:trace命令

命令格式

bash 复制代码
trace [全限定类名] [方法名] '#cost>阈值' -n 监控次数

核心功能

追踪方法内部调用链,精确到每一行代码的耗时,快速定位性能瓶颈。

使用示例

bash 复制代码
# 监控saveMedicalDiag方法,仅显示耗时>10ms的调用,最多捕获5次
trace com.example.ClinicService saveMedicalDiag '#cost>10' -n 5

输出解读

复制代码
`---ts=2025-07-30 12:00:00;thread_name=http-nio-8080-exec-1;id=1e;is_daemon=true;priority=5;
    `---[15.78ms] com.example.ClinicService:saveMedicalDiag()
        +---[0.5ms] com.example.DBUtil:getConnection() 
        +---[12.0ms] com.example.DAO:insert()  # ⚠️ 主要耗时点
        `---[3.2ms] com.example.Logger:writeLog()

注意事项

  1. 默认忽略java.*包下的调用,需逐层排查或使用正则监控多层调用
  2. 正则监控示例:trace -E com.service.*|com.dao.* save*

📘 https://arthas.aliyun.com/doc/trace.html


三、运行时数据观测:watch命令

命令格式

bash 复制代码
watch [类名] [方法名] '{观察表达式}' [参数]

核心功能

观察表达式 作用 示例
params 捕获方法入参 {params[0].userName}
target 获取当前对象属性 target.connectionPoolSize
returnObj 获取返回值 returnObj.status
throwExp 捕获异常信息 throwExp.getMessage()

常用参数

参数 作用
-b 方法调用前触发
-e 异常时触发
-s 方法返回后触发
-f 方法结束后触发
-x 3 设置对象遍历深度
-n 10 仅监控前10次调用
--exclude-class-pattern *Controller 排除特定类

实用场景示例

1. 监控异常时的入参

bash 复制代码
watch com.example.OrderService createOrder '{params, throwExp}' -e -x 3

输出:

复制代码
ts=2025-07-30 14:30:00; [cost=45ms] result=ArrayList[
  @Object[][  # 入参
    @OrderRequest[userId="U123", productId=null],  # ⚠️ 空值导致异常
  ],
  ctd.persistence.DAOException: 产品ID不能为空!  # 异常信息
]

2. 监控返回值属性

bash 复制代码
watch com.example.UserService getUser '{returnObj.age, returnObj.name}' -s

3. 跟踪对象状态变化

bash 复制代码
watch com.example.CacheService refresh 'target.cacheSize' -f

📘 https://arthas.aliyun.com/doc/watch.html


四、Arthas核心优势

  1. 无侵入诊断

    无需修改代码或重启服务,直接接入线上JVM进程

  2. 精准定位
    trace精确到代码行级耗时,watch实时捕获运行时数据

  3. 动态热更新

    支持在线修改字节码(https://arthas.aliyun.com/doc/redefine.html)

  4. 全链路支持

    集成火焰图、线程分析、内存监控等全方位工具


五、使用建议

  1. 生产环境慎用

    优先在测试环境验证命令,避免-f参数导致大量日志输出

  2. 组合使用命令

    先用trace定位瓶颈方法,再用watch分析具体参数

  3. 正则表达式优化

    使用-E参数批量监控多个类:watch -E 'com.service.*|com.dao.*' *

通过Arthas官方提供的https://arthas.aliyun.com/doc/web-console.html可图形化操作,提升诊断效率。

掌握Arthas的核心命令,能让Java应用的线上问题排查效率提升数倍,真正实现"无需重启的诊断艺术"。