本文目录导读:

- 快速入门:启动与基础命令
- 定位 CPU 高、线程阻塞等性能问题
- 排查接口响应慢、方法耗时瓶颈
- 线上问题热修复与动态修改
- 查看线上运行中的配置、参数、内存对象
- 排查异常/错误场景
- 分析IO、网络、锁等问题
- 🔥 核心用法速记口诀(实际工作引用)
- ⚠️ 注意事项
Arthas(阿尔萨斯)是阿里巴巴开源的Java诊断工具,主要用于线上问题的实时排查,无需修改代码或重启应用,以下是它在线上问题排查时的典型用法和场景:
快速入门:启动与基础命令
- 启动:在目标JVM所在机器上执行
java -jar arthas-boot.jar,选择需要诊断的Java进程。 - 常用基础命令:
dashboard:实时查看线程、内存、GC、系统信息(类似JVM监控面板)。thread:查看线程栈,定位死锁、CPU过高线程(thread -b直接显示阻塞线程)。jvm:查看JVM各项参数、类加载、编译、内存等详细状态。
定位 CPU 高、线程阻塞等性能问题
- 场景:CPU飙高、系统卡慢、接口无响应。
- 典型用法:
thread:列出所有线程及其CPU占比,thread -n 5显示最忙的5个线程。thread <id>:查看具体线程的堆栈,识别热点代码。thread -b:直接定位当前阻塞其他线程的线程(死锁检测利器)。dashboard:观察内存、GC频率、线程数变化,判断是内存泄漏还是CPU密集型任务。
排查接口响应慢、方法耗时瓶颈
- 场景:某个API接口偶尔超时,或整体请求变慢。
- 典型用法:
trace <类名> <方法名>:统计方法内部所有子调用的耗时、次数和调用链路。- 示例:
trace com.example.service.UserService getUserInfo可以精确看到SQL查询、RPC调用哪个环节最慢。
- 示例:
watch <类> <方法> "{params,returnObj,throwExp}" -x 2:观测方法入参、返回值、异常,并展开深度2层。- 示例排查返回数据异常:
watch com.example.controller.OrderController getOrder "{params,returnObj}" -x 3
- 示例排查返回数据异常:
monitor/tt:monitor统计方法调用频率、成功/失败次数;tt(TimeTunnel)记录快照,可回放方法调用现场。
线上问题热修复与动态修改
- 场景:紧急修复线上Bug,但无法立即发布版本(需谨慎,通常用于临时止血)。
- 典型用法:
ognl:执行任意Java表达式,动态修改静态变量、调用方法。- 示例:
ognl '@com.example.config.GlobalConfig@TIME_OUT=5000'动态改超时时间。
- 示例:
mc+redefine:使用mc将修改后的Java文件编译为class,再用redefine热替换线上类(注意:仅覆盖方法体,不支持新增字段/方法,有风险)。vmtool:直接调用Spring Bean或任意对象的方法(如强制刷新缓存),比ognl更安全易用。
查看线上运行中的配置、参数、内存对象
- 场景:验证配置是否正确、查看某个变量当前值、确认缓存内容。
- 典型用法:
sc:搜索已加载的类,sc -d *Controller查看类详细信息(来源、注解、字段)。sm:查看类的方法签名(方法名、参数、返回值)。heapdump:生成堆转储文件(heapdump /tmp/dump.hprof),配合MAT分析大对象。vmtool --action getInstances:获取某个类的所有实例,查看其字段值(例如查看某个缓存Map的内容)。
排查异常/错误场景
- 场景:偶发报错、业务逻辑异常、日志不完整。
- 典型用法:
watch配合-e参数:watch com.example.service.* * "{throwExp}" -e -x 2只捕获并打印异常。stack <类名> <方法名>:打印当前方法被调用的完整调用栈,便于溯源异常路径。monitor -c 5 <类> <方法>:每5秒统计一次方法调用,快速定位高错误率方法。
分析IO、网络、锁等问题
- 场景:文件句柄泄漏、网络等待、锁竞争严重。
- 典型用法:
stack:结合thread或trace查看IO等待的堆栈(如java.net.SocketInputStream.read)。vmtool结合lockInfo:查看对象持有锁的情况(Arthas 3.5+版本支持)。trace配合过滤:trace -j com.example.service.* * '#cost > 500'只打印耗时超过500ms的调用。
🔥 核心用法速记口诀(实际工作引用)
| 场景 | 命令 | 说明 |
|---|---|---|
| CPU高、死锁 | thread -n 5 / thread -b |
定位最忙线程、阻塞线程 |
| 慢方法捉虫 | trace + 类/方法 |
统计子调用耗时,V1.0.0 |
| 数据异常定位 | watch + -x |
打印输入输出值,深度展开 |
| 临时修复配置 | ognl / vmtool |
改静态变量、调Spring Bean方法 |
| 内存泄漏分析 | heapdump |
生成dump,离线分析 |
| 查看实例状态 | vmtool --action getInstances |
获取任意对象,看当前内部数据 |
⚠️ 注意事项
- 生产环境慎用:
redefine/ognl等动态修改命令可能引发不稳定,建议仅在严重故障时作为临时手段。 - 安全限制:部分命令(如
heapdump)占用较多资源,高峰期需谨慎。 - 配合日志:Arthas擅长实时调试,但长期监控靠日志和APM(如SkyWalking)。
如果你有具体线上问题(如某个接口慢、OOM、锁等待等),可以告诉我,我可以给你具体的Arthas排查步骤。