本文大纲
《JVM剖析及性能跟踪》
JVM剖析工具--Arthas
Arthas(阿尔萨斯)介绍
Arthas 是阿里巴巴开源的一款强大的 Java 诊断工具,旨在帮助开发者快速定位和解决 Java 应用中的各种问题。无论是线上环境还是开发环境,Arthas 都能提供强大的支持,帮助开发者深入理解应用的运行状态,诊断性能瓶颈,甚至动态修改代码。由于其功能强大且易于使用,Arthas 已经成为众多 Java 开发者的首选工具之一。
官方文档
Arthas 能解决哪些问题?
当你遇到以下类似问题而束手无策时,Arthas 可以帮助你解决:
- 类加载问题:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
- 代码未生效:我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
- 线上调试困难:遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
- 用户数据问题:线上遇到某个用户的数据处理有问题,但线上无法 debug,线下无法重现!
- 系统运行状态:是否有一个全局视角来查看系统的运行状况?
- JVM 监控:有什么办法可以监控到 JVM 的实时运行状态?
- 性能热点定位:怎么快速定位应用的热点,生成火焰图?
支持环境
- JDK 版本:支持 JDK 6 及以上版本。
- 操作系统:支持 Linux、Mac、Windows。
- 交互模式:采用命令行交互模式,提供丰富的 Tab 自动补全功能,极大地方便了问题的定位和诊断。
Arthas 启动
下载与启动
-
下载 Arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar -
启动 Arthas:
-
方式一:直接启动
java -jar arthas-boot.jar -
方式二:使用脚本启动
./as.sh
-
注意事项
-
权限问题:执行 Arthas 的用户需要和目标进程具有相同的权限,否则可能 attach 失败。例如,如果目标进程是以
admin用户运行的,可以使用以下命令启动 Arthas:sudo su admin && java -jar arthas-boot.jar或者:
sudo -u admin -EH java -jar arthas-boot.jar -
attach 失败:如果 attach 不上目标进程,可以查看
~/logs/arthas/目录下的日志。 -
下载速度慢:如果下载速度较慢,可以使用阿里云的镜像:
java -jar arthas-boot.jar --repo-mirror aliyun --use-http -
找不到 tools.jar:如果报错
tools.jar was not found, so arthas could not be launched!,请确保设置了正确的JAVA_HOME环境变量。例如:export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
Arthas 常用命令
1. dashboard:实时数据面板
dashboard 命令可以显示当前系统的实时数据面板,包括线程信息、JVM 内存信息及 JVM 运行时参数。按 ctrl+c 退出。
dashboard

2. thread:线程分析
thread 命令用于查看当前线程信息,帮助诊断线程阻塞、死锁等问题。
-
查看当前线程列表:
thread -
查看所有线程:
thread --all -
查找阻塞线程:
thread -b注意:目前只支持查找
synchronized关键字阻塞的线程,java.util.concurrent.Lock暂不支持。 -
统计线程 CPU 时间:
thread -i 1000统计最近 1000ms 内的线程 CPU 时间
-
列出最忙的线程:
thread -n 3 -i 1000列出 1000ms 内最忙的 3 个线程栈。
-
查看指定状态的线程:
thread --state WAITING thread --state BLOCKED
3. jad:反编译代码
jad 命令可以将 JVM 中实际运行的 class 的字节码反编译成 Java 代码,便于理解业务逻辑。
jad com.example.MyClass
4. classloader:类加载器信息
classloader 命令可以统计 JVM 中所有类加载器的信息,并展示继承树、URLs 等。
classloader
5. dump:导出字节码
dump 命令可以将已加载类的字节码导出到特定目录。
dump com.example.MyClass
6. 其他常用命令
- sysprop:查看和修改 JVM 系统属性。
- sysenv:查看 JVM 环境变量。
- sc:查看 JVM 已加载的类信息。
- sm:查看类的方法信息。
- mc:编译 Java 代码。
- redefine:热更新类。
- monitor:监控方法执行情况。
- watch:观察方法执行时的参数和返回值。
参考资料
总结
Arthas 是一款功能强大且易于使用的 Java 诊断工具,能够帮助开发者快速定位和解决 Java 应用中的各种问题。无论是线程分析、内存监控,还是代码热更新,Arthas 都提供了丰富的功能支持。通过熟练掌握 Arthas 的使用,开发者可以显著提升问题排查的效率,优化应用的性能和稳定性。如果你还没有尝试过 Arthas,建议立即下载并体验,相信它会成为你日常开发中的得力助手。