阿里开源线上诊断工具Arthas,适合生产环境故障排查
Arthas 是阿里开源的线上诊断工具,尤其适合生产环境下的动态监控、问题排查,无需重启服务,对业务侵入性极低。下面整理了一批高频实用的 Arthas 命令及实际用法,直接解决 “线程阻塞、GC 异常、方法耗时、依赖冲突” 等问题。

一、部署环境:
Spring Boot 3 + JDK17 + K8s
二、下载arthas (-O是将远端文件保存到本地)
curl -O https://arthas.aliyun.com/arthas-boot.jar
将文件下载到宿主机后,然后cp到k8s Pod容器中:
# 复制 Arthas 到 Pod 的指定容器
kubectl cp arthas-boot.jar myapp-pod-xyz:/tmp/arthas-boot.jar -c myapp-container
三、Arthas启动
# 启动并选择进程(Spring Boot 进程 PID 通常为 1)
java -jar arthas-boot.jar 1
四、线程问题排查(核心场景)
1. 快速定位 “死锁或阻塞线程”
命令:thread -b
作用:立即找出 “阻塞其他线程的根源线程”(通常是死锁或长期持有锁的线程)。
场景:服务调用超时、无响应时,先执行此命令,10 秒内定位是否有死锁或阻塞。
2. 监控高 CPU 线程
命令:thread -n 3
作用:显示 CPU 使用率最高的前 3 个线程,每 3 秒刷新一次。
场景:服务 CPU 飙升时,查看是否有线程死循环(如日志格式处理逻辑异常)。
示例:若某线程长期占用 90%+ CPU,执行 thread <线程ID> 查看其调用栈。

3. 按状态筛选线程
命令:thread --state BLOCKED
作用:只显示处于 BLOCKED 状态的线程,实时刷新。
场景:监控阻塞线程数量是否随时间增加(如日志写入锁竞争加剧)

4. 线程状态趋势统计
命令:thread -i 2000
作用:每 2000 毫秒(2 秒)打印一次线程状态汇总(总线程数、各状态数量)。
场景:观察 “等待线程数” 是否激增(可能是线程池队列满)。

5.JVM 状态实时监控面板
命令:dashboard
作用:实时展示 JVM 核心指标(CPU、内存、线程、GC),每 5 秒刷新一次。
重点关注:
内存区:老年代(OLD)是否持续增长(内存泄漏信号)。
GC 区:Full GC 次数是否频繁(如 1 分钟多次)。
线程区:Runnable/BLOCKED/WAITING 线程数变化

Arthas的功能其实非常多,可以通过help查看所有命令。Arthas对代码入侵为0,对生产环境故障的排查非常有帮助,上面只是罗列了一些常用的命令,但对于命令回显的详细解释需要更进一步的学习,我想对于我们Java程序员,除了要会写代码,还要具备故障排查等复杂问题处理能力。

