在 linux 下调试 Hotspot JVM 时使用 Serviceability Agent 有什么好处?

what's the benefit of using Serviceability Agent when debuging HotspotJVM under linux?

在linux中,Hotspot Serviceability Agent由ptrace实现,它将停止被调试进程。既然它对目标 JVM 有副作用,为什么不简单地附加到那个 JVM?

如果 SA 对目标 JVM 没有影响,那么它非常有用。但事实并非如此。所以我想知道在 linux 中使用 SA 是什么意思?

您无法附加到不响应附加命令的 Java 进程。因此,动态附加的主要优点在另一方面也是它的缺点:附加仅适用于活跃且健康的 JVM。

同时,Serviceability Agent不依赖于JVM的配合。即使目标进程卡住、死锁、过载或无法为请求提供服务,它也能正常工作。它甚至适用于 dead JVM。是的,您可以使用 SA 对核心转储进行事后分析。

正如您在标题中注意到的,SA 用于调试 JVM。 attach 机制依赖于 JVM 正常工作和正常工作的事实——从这个角度来看,它对于查找 JVM 本身的错误 毫无用处。在这种情况下,您将需要一个外部工具,例如 SA。

参考资料