1. 安装 Arthas
方法一:通过脚本安装
- 打开终端(Linux/Mac)或命令提示符(Windows)。
- 下载并运行安装脚本:
curl -O https://arthas.aliyun.com/arthas-boot.jar
- 启动 Arthas:
java -jar arthas-boot.jar
方法二:手动下载
- 访问 Arthas 官方 GitHub 或 Arthas 官网。
- 下载最新版本的
arthas-boot.jar
文件。 - 使用以下命令启动:
java -jar arthas-boot.jar
2. 快速入门
步骤 1:选择目标 Java 进程
- 启动 Arthas 后,它会列出当前机器上所有的 Java 进程。
- 按照提示输入目标 Java 进程的编号(PID),例如:
Please select the target process: 1
步骤 2:常用命令
以下是一些常用的 Arthas 命令及其用途:
- 查看类加载信息
sc -d <class-name>
示例:
sc -d com.example.MyClass
- 查看方法调用
sm <class-name>
示例:
sm com.example.MyClass
- 监控方法执行
watch <class-name> <method-name> '{params, returnObj, throwExp}'
示例:
watch com.example.MyClass myMethod '{params, returnObj}'
- 查看线程状态
thread
查看某个线程的堆栈:
thread <thread-id>
- 动态修改日志级别
logger --name <logger-name> --level <level>
示例:
logger --name ROOT --level DEBUG
- 查看 JVM 信息
jvm
- 退出 Arthas
stop
3. 示例场景
场景 1:排查方法性能问题
假设我们怀疑 com.example.MyService#process
方法性能有问题:
- 使用
watch
命令监控方法入参、返回值和耗时:
watch com.example.MyService process '{params, returnObj, cost}' -x 3
-x 3
表示统计方法调用的耗时。
场景 2:排查死锁问题
- 使用
thread
命令查看线程状态:
thread
- 如果发现死锁,使用以下命令定位死锁线程:
thread -b
场景 3:动态调整日志级别
- 动态将日志级别改为 DEBUG:
logger --name com.example.MyLogger --level DEBUG
4. 高级功能
热更新代码
Arthas 支持在不重启应用的情况下热更新代码:
- 使用
jad
反编译类:
jad com.example.MyClass
- 修改代码后,使用
redefine
加载新代码:
redefine /path/to/MyClass.class
火焰图分析
Arthas 提供了生成火焰图的功能,用于分析性能瓶颈:
profiler start
运行一段时间后停止并生成火焰图:
profiler stop
5. 注意事项
- 权限问题:确保运行 Arthas 的用户有权限访问目标 Java 进程。
- 生产环境:谨慎使用热更新功能,避免对生产环境造成影响。
- 版本兼容性:确保 Arthas 版本与目标 JDK 版本兼容。
6. 参考资料
- 官方文档:Arthas 官网
- GitHub 仓库:https://github.com/alibaba/arthas