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 线程与堆栈
4.5 日志与配置动态调整
4.6 异步任务管理
-
jobs:列出所有后台命令任务及状态Arthas。 -
kill <jobId>:终止指定的异步任务Arthas。 -
fg <jobId>/bg <jobId>:将任务切换到前台/后台Arthas。
5. 场景实战
5.1 慢接口排查
-
Dashboard:首选“上帝视角”,查看 QPS、RT、错误数、线程池概览等阿里云开发者社区-云计算社区-阿里云。
-
trace:对于某慢接口
com.example.UserService.findUser,执行:trace com.example.UserService findUser可看到内部调用链及耗时Arthas。
-
monitor:统计同一方法调用指标,识别偶发性慢调用Arthas。
5.2 CPU 占用高
-
tt:记录方法执行时序图,分析热点调用参数差异Arthas。
-
profiler:在命令行执行
profiler start; sleep 30; profiler stop,生成火焰图定位热点Arthas。
5.3 内存泄漏
-
memory:初步查看堆使用情况,判断 Old Gen 是否持续增高Arthas。
-
heapdump:执行
heapdump /tmp/heap.dump,离线通过 MAT 分析对象保留关系Arthas。
5.4 线程阻塞或死锁
5.5 动态热修复
-
redefine:将补丁类
FixClass.class注入 JVM:redefine /path/to/FixClass.class即可完成线上紧急修复,无需重启或发布Arthas。
-
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 的使用,请参考官方文档或相关教程。


1万+

被折叠的 条评论
为什么被折叠?



