Arthas
你可能会说
线上 Java 服务出问题,难道只能重启或者加日志再发一版?
阿里开源的 Java 线上诊断工具,不改代码、不重启attach 到运行中的 JVM,用命令行就能看类加载、反编译、方法耗时、线程栈和内存对象,排查完 detach 走人。它解决「线上不好复现、又不能停服」的临时排查,不是常驻监控。
也常被叫作Java 线上诊断阿尔萨斯
什么时候选它
- 线上接口变慢,要定位是哪个方法慢(trace / watch)
- 想确认运行的到底是不是最新代码(jad / sc / sm)
- 线程池打满、请求卡住,要看线程栈和热点(thread)
- 不能改代码、不能重启的临时排查
什么时候别选
- 需要长期指标和告警(Prometheus / APM 才是常驻方案)
- 团队不懂 JVM,命令玩不转还容易误操作
- 安全要求禁止 attach 诊断工具的环境
容易混在一起 · 怎么分
Arthas≠APM
APM(如 SkyWalking)常驻采集指标和链路;Arthas 是出问题时临时 attach 进去看现场。
Arthas≠日志
日志要在事后翻、还得先发版加;Arthas 直接看运行中的方法入参出参和耗时。
Arthas≠jstack / jmap
底层能力同类,Arthas 把它们和反编译、耗时统计封成一套交互式命令。
Q面试会问什么
- 问:怎么 attach 到线上进程?
答:下载 arthas-boot,选目标 JVM 进程 PID;底层走 JDK attach 机制,不用改启动参数。 - 问:trace 和 watch 有什么区别?
答:trace 统计一个调用链上各层方法的耗时;watch 观察指定方法的入参、返回值和异常。 - 问:线上用有什么风险?
答:增强字节码会带来开销,别在高频方法上长时间 watch;优先只读命令,排查完 stop 卸载增强。
延伸阅读 · 权威出处