Arthas 简介
Arthas 是阿里巴巴开源的 Java 诊断工具,它可以帮助开发者在不修改代码和重启服务的情况下,对生产环境中的 Java 程序进行实时诊断。以下是 Arthas 一些常用命令的 Markdown 整理以及实际运用示例。
安装 Arthas
在使用 Arthas 之前,需要先进行安装。可以通过以下命令下载并启动 Arthas:
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
常用命令
1. dashboard
- 功能:展示当前 Java 进程的线程、内存、GC、类加载等信息的实时统计数据。
- Markdown 示例
dashboard
- 实际运用:当你想要快速了解 Java 进程的整体运行状态,比如查看线程的活跃度、内存使用情况等,就可以使用这个命令。例如,在排查系统响应缓慢的问题时,通过
dashboard
命令查看线程是否存在大量阻塞,内存是否接近上限。
2. thread
- 功能:查看线程的详细信息,如线程状态、CPU 占用率等。
- 常用子命令
thread
:查看所有线程的信息。thread <id>
:查看指定线程 ID 的详细信息。thread -b
:找出当前阻塞其他线程的线程。
- Markdown 示例
# 查看所有线程信息
thread
# 查看线程 ID 为 10 的详细信息
thread 10
# 找出阻塞其他线程的线程
thread -b
- 实际运用:当系统出现卡顿或者死锁问题时,使用
thread -b
可以快速定位到阻塞其他线程的元凶。使用thread <id>
可以查看某个线程的具体堆栈信息,帮助分析线程在做什么。
3. sc
(Search-Class)
- 功能:搜索指定类名的类。
- Markdown 示例
# 搜索所有包含 UserService 的类
sc *UserService
- 实际运用:当你想要找到某个类在哪个类加载器中加载,或者确认某个类是否存在时,可以使用这个命令。例如,在排查类冲突问题时,通过
sc
命令查看类的加载情况。
4. sm
(Search-Method)
- 功能:搜索指定类的方法信息。
- Markdown 示例
# 搜索 UserService 类的所有方法信息
sm com.example.UserService
- 实际运用:在对某个类进行调试时,使用
sm
命令可以快速了解该类有哪些方法,方法的参数和返回值类型等信息。
5. watch
- 功能:监听方法的调用,观察方法的入参、返回值、抛出的异常等信息。
- Markdown 示例
# 监听 UserService 的 getUser 方法的入参和返回值
watch com.example.UserService getUser '{params, returnObj}' -x 2
- 实际运用:当你想要了解某个方法在运行时的具体输入和输出情况,比如排查方法返回值不符合预期的问题,就可以使用
watch
命令。
6. trace
- 功能:追踪方法调用的调用路径,统计每个调用的耗时。
- Markdown 示例
# 追踪 UserService 的 getUser 方法的调用路径和耗时
trace com.example.UserService getUser
- 实际运用:当你发现某个方法执行缓慢,但不知道具体是哪个子调用导致的,可以使用
trace
命令来找出耗时较长的调用链路。
7. tt
(TimeTunnel)
- 功能:记录方法调用的详细信息,并可以对记录进行回放。
- Markdown 示例
# 记录 UserService 的 getUser 方法的调用
tt -t com.example.UserService getUser
# 回放编号为 1000 的调用记录
tt -p -i 1000
- 实际运用:当某个方法的调用出现问题,但无法复现或者难以调试时,使用
tt
命令记录调用信息,然后通过回放来分析问题。
总结
以上是 Arthas 一些常用命令的介绍和实际运用示例。通过这些命令,开发者可以在生产环境中快速定位和解决 Java 程序的各种问题。