选型

Arthas

你可能会说

线上 Java 服务出问题,难道只能重启或者加日志再发一版?

阿里开源的 Java 线上诊断工具,不改代码、不重启attach 到运行中的 JVM,用命令行就能看类加载、反编译、方法耗时、线程栈和内存对象,排查完 detach 走人。它解决「线上不好复现、又不能停服」的临时排查,不是常驻监控。
也常被叫作Java 线上诊断阿尔萨斯
先问一句线上 Java 出问题,不能重启?
默认Arthas→擅长热诊断 + 反编译→别用常驻监控
成熟度采用

什么时候选它

  • 线上接口变慢,要定位是哪个方法慢(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 卸载增强。
延伸阅读 · 权威出处