arthas 使用教程

--------------------------------------------------------------------------------------------------------------------------------

arthas 使用教程
Arthas 是 Alibaba 开源的 Java 诊断工具,能帮助开发者在线排查问题(无需重启应用),比如查看线程状态、类加载信息、方法调用参数 / 返回值等。以下是其核心使用教程:

一、安装与启动

1. 下载 Arthas

bash
 
 
# 用 curl 或 wget 下载(适用于 Linux/Mac)
curl -O https://arthas.aliyun.com/arthas-boot.jar
# 或
wget https://arthas.aliyun.com/arthas-boot.jar
 

2. 启动 Arthas

bash
 
 
# 启动并选择要诊断的 Java 进程(需 JDK 8+ 环境)
java -jar arthas-boot.jar
 
  • 运行后会列出当前机器上的 Java 进程,输入序号(如 1)并回车,即可 attach 到目标进程。
  • 成功后进入 Arthas 交互终端(命令行界面)。

二、核心命令速查

1. 基础命令

命令作用示例
help 查看命令帮助 help watch 查看 watch 命令用法
cls 清空屏幕 cls
quit 退出 Arthas(不中断目标进程) quit
shutdown 关闭 Arthas 服务(所有连接都断开) shutdown

2. 类与类加载相关

命令作用示例
sc 搜索已加载的类(类名模糊匹配) sc com.example.UserService
sm 查看类的方法信息 sm com.example.UserService * 查看所有方法
jad 反编译类(查看源码) jad com.example.UserService
classloader 查看类加载器信息 classloader -l 列出所有类加载器

3. 方法监控与调试

命令作用示例
watch 监控方法的参数、返回值、异常 watch com.example.UserService getUser "{params, returnObj}" -x 2(-x 指定展开层级)
trace 追踪方法调用链路(耗时分析) trace com.example.UserService getUser 查看调用链及各步骤耗时
stack 查看方法的调用栈 stack com.example.UserService getUser 谁调用了 getUser 方法
tt 记录方法调用快照(可回放) tt -t com.example.UserService getUser 记录调用,tt -i 100 查看 ID=100 的快照

4. 线程相关

命令作用示例
thread 查看线程状态(排查死锁、CPU 高占用) thread 查看所有线程;thread 10 查看 ID=10 的线程栈;thread -n 3 查看 CPU 占用前 3 的线程
jstack 导出线程栈(类似 JDK 的 jstack 命令) jstack > thread_dump.txt 保存线程栈到文件

5. JVM 相关

命令作用示例
dashboard 实时展示 JVM 仪表盘(内存、线程、GC 等) 直接输入 dashboard,按 q 退出
jvm 查看 JVM 详细信息(内存、GC、系统属性等) jvm
gc 查看 GC 统计信息 gc 或 gc -i 查看 GC 详情

6. 热更新代码(无需重启)

命令作用步骤示例
redefine 加载新的 class 文件替换已加载的类 1. 用 jad 反编译类:jad com.example.UserService > UserService.java
 
2. 修改 Java 代码后编译为 class 文件
 
3. 用 redefine 加载:redefine UserService.class

三、实战场景示例

场景 1:排查接口耗时高的问题

  1. 用 trace 命令追踪方法调用链,定位耗时步骤:
    bash
     
     
    trace com.example.OrderController createOrder
    
     
     
    输出会显示 createOrder 方法内部调用的各子方法及其耗时,快速定位瓶颈(如某个数据库查询耗时过长)。

场景 2:查看方法调用的实际参数

  1. 用 watch 监控方法参数和返回值:
    bash
     
     
    watch com.example.UserService queryUser "{params[0], returnObj}" -x 3
    
     
     
    当 queryUser 被调用时,会打印第一个参数(params[0])和返回值(returnObj),-x 3 表示展开对象的 3 层属性(避免输出过长)。

场景 3:排查线程死锁

  1. 执行 thread 命令,若存在死锁,会直接提示:
    bash
     
     
    thread
    
     
     
    输出中会标记死锁的线程 ID,再用 thread <ID> 查看具体堆栈,分析锁竞争原因。

四、退出与卸载

  • 临时退出:quit(Arthas 后台进程仍在,可重新连接)。
  • 彻底关闭:shutdown(终止 Arthas 服务,需重新启动才能连接)。

五、进阶技巧

  • 命令参数补全:按 Tab 键自动补全类名、方法名(需类已加载)。
  • 管道命令:结合 grep 筛选结果,如 thread | grep "Runnable"
  • Web 控制台:启动后可通过 http://localhost:8563 访问 Web 界面(更友好的交互)。

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------

posted @ 2025-11-10 16:41  hanease  阅读(240)  评论(0)    收藏  举报