命令记录|arthas

        问题跟踪利器arthas所有命令,黄色划线的是我经常用到的,其中trace、watch、getstatic和ognl四个命令在跟踪问题时候非常强大,本文主要记录部分常用和重要的命令,其他基础命令和出场率不高的命令可以随时在官网查看: 

        具体解释参考以下官网文档,这里只列出我自己常用到的命令,一是系统整理总结经验,二是为了后面查找方便。

arthas官网文档https://arthas.aliyun.com/doc/commands.html

  1. 确认jvm中运行的class文件是否和预期的一致,反编译class - jad
     jad com.xxx.xxx.Cache xxxMethod
  2. 跟踪方法耗时 - trace
    trace org.apache.commons.lang.StringUtils isBlank  '#cost>100'
  3. 查看方法的入参或返回值信息 - watch
    // 常用方法
    watch org.apache.commons.lang.StringUtils isBlank '{params, target, returnObj, throwExp}' -x 2
    watch *StringUtils isBlank params[0] params[0].length==1
    watch *StringUtils isBlank params '#cost>100'
    // 根据参数条件watch,注意Long类型要L后缀
    watch com.xxx.xxx.DataService xxxMethodName '{params[2]}' 'params[1].equals(1905187677257728L)' -x 4
    // 当出现异常时watch
    -e XXXException
    
    // 带条件的watch
    watch com.xxx.xxx method '{params,returnObj}' 'params[0]==2246208753929216L'  -x 4
    watch com.xxx.xxx method '{params[1],returnObj}' 'params[0].ipV4.equals("11.11.8.20#9003")' -x2
  4. 查看类变量具体信息或属性 - getstatic
    # 很多缓存信息定义为类变量,可以通过以下方法查看缓存的信息
    getstatic com.xxx.xxx.Cache XxxMap         // 查看全部缓存
    getstatic com.xxx.xxx.Cache XxxMap 'entrySet().iterator.{? #this.key=="9527"}'            // 查看map中某个key对应的entry信息
    getstatic com.xxx.xxx.Cache XxxMap 'size()'    // 查看map大小
    
    
  5. 调用静态方法 - ognl
    ognl '@java.lang.System@out.println("hello")'
    # 通过hashcode指定ClassLoader
    sc -d com.xxx.xxx.XxxService | grep -v hashcode      // 得到ClassLoader的hashcode
    ognl '@com.xxx.xxx.XxxService@setEncodeConf(true)'   // 调用springbean的静态方法修改配置

  6. 查看spring-bean的属性
    ognl -c 7ef20235 '@com.xxx.xxx.common.util.spring.SpringUtil@getBean("serviceName").property'

  7. 通过线程名称确认线程是否存在 - thread
    thread | grep -v 'thread-name'

        对于大部分命令和具体用法,都可以使用-h参数查询使用说明。

<think>好的,用户想了解Arthas命令列表及用法。首先,我需要回顾之前提供的引用内容,特别是引用[1]和引用[3],因为它们提到了具体的命令和用法。 用户的问题是关于Arthas命令的列表和使用方法,所以需要先整理出主要的命令及其功能。引用[1]中提到了quit、shutdown、stop、monitor、watch、trace、stack、tt等命令,这些是基础且常用的。需要逐个解释这些命令的作用,比如monitor用于监控方法执行,watch用于观察数据,trace用于追踪调用路径耗时等。 接下来,引用[3]详细说明了trace命令的用法,包括如何过滤耗时过长的调用,这可以作为例子来具体说明命令的参数使用,比如#cost>100。同时,用户可能需要知道如何组合使用条件表达式,这里可以结合ognl表达式举例。 用户可能还需要知道如何获取帮助信息,比如使用help命令,这在引用中没有提到,但根据常识,应该补充进去。另外,引用[5]提到的reset命令用于清除增强的类,这也是一个重要的点,需要包含在命令列表中。 还需要考虑用户的实际使用场景,比如线上诊断时需要注意的事项,如引用[1]提到的使用后执行stop或reset,避免影响性能。这部分应该作为注意事项提醒用户。 最后,生成相关问题时要覆盖用户可能进一步询问的内容,比如具体某个命令的详细参数、如何排查性能问题、与日志工具结合使用等。确保问题有针对性,帮助用户深入理解Arthas的功能。</think>### Arthas 命令列表及用法详解 Arthas 是阿里巴巴开源的 Java 诊断工具,提供丰富的命令用于监控、分析和排查 Java 应用的运行时状态。以下是常用命令的分类说明及用法示例: --- #### 一、**基础控制命令** 1. **`quit`** 退出当前 Arthas 客户端,不影响其他已连接的客户端[^1]。 2. **`shutdown`** 关闭 Arthas 服务端,所有客户端均会退出[^1]。 3. **`stop`** 停止当前诊断会话,并重置被增强的类(避免对线上环境造成性能影响)[^1][^5]。 --- #### 二、**核心诊断命令** 1. **`monitor`** **功能**:统计方法执行的耗时、成功率等指标。 **示例**: ```bash monitor com.example.Service * -c 5 # 每5秒统计一次Service类下所有方法的执行情况 ``` 2. **`watch`** **功能**:观察方法调用的入参、返回值及异常信息。支持 OGNL 表达式过滤。 **示例**: ```bash watch com.example.UserService getUserById "{params, returnObj}" -x 2 # 打印参数和返回值,展开层级为2 ``` 3. **`trace`** **功能**:追踪方法内部调用链路,并统计各节点耗时。支持按耗时过滤(如 `#cost>100`)。 **示例**: ```bash trace *MathUtils calculate* '#cost>50' # 追踪所有calculate开头的方法,耗时超过50ms时输出[^3] ``` 4. **`stack`** **功能**:输出当前方法被调用的完整堆栈路径。 **示例**: ```bash stack com.example.OrderService createOrder # 显示createOrder方法的调用来源 ``` 5. **`tt`** (Time Tunnel) **功能**:记录方法调用的入参、返回值及上下文,支持回放和对比历史调用。 **示例**: ```bash tt -t com.example.PaymentService pay # 记录pay方法的每次调用 tt -i 1001 -p # 回放索引为1001的调用记录 ``` --- #### 三、**高级分析与调优** 1. **`jad`** **功能**:反编译指定类的字节码,支持 `--source-only` 仅显示源码。 **示例**: ```bash jad java.lang.String --source-only # 反编译String类源码[^4] ``` 2. **`redefine`** **功能**:热更新已加载的类(需结合 `mc` 命令编译新代码)。 **步骤**: ```bash jad --source-only com.example.Config > Config.java # 导出源码 mc Config.java -d /tmp # 编译修改后的代码 redefine /tmp/Config.class # 热更新类 ``` 3. **`reset`** **功能**:清除指定类的增强字节码,恢复原始状态。 **示例**: ```bash reset *TradeService* # 重置所有匹配类名的增强类[^5] ``` --- #### 四、**注意事项** 1. **性能影响**:监控命令通过字节码增强实现,需明确监控范围,诊断后及时执行 `stop` 或 `reset`[^1]。 2. **正则匹配**:使用 `-E` 开启正则表达式匹配类名/方法名(默认通配符匹配)[^3]。 3. **帮助查询**:通过 `help [command]` 查看具体命令的详细参数(如 `help watch`)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值