【发布时间】:2021-10-04 12:58:04
【问题描述】:
在 linux 中,Hotspot Serviceability Agent 由ptrace 实现,它将停止被调试进程。既然它对目标 JVM 有副作用,为什么不直接附加到那个 JVM 上呢?
如果 SA 对目标 JVM 没有影响,那么它非常有用。但事实并非如此。所以我想知道在linux中使用SA是什么意思?
【问题讨论】:
标签: java jvm jvm-hotspot hotspot
在 linux 中,Hotspot Serviceability Agent 由ptrace 实现,它将停止被调试进程。既然它对目标 JVM 有副作用,为什么不直接附加到那个 JVM 上呢?
如果 SA 对目标 JVM 没有影响,那么它非常有用。但事实并非如此。所以我想知道在linux中使用SA是什么意思?
【问题讨论】:
标签: java jvm jvm-hotspot hotspot
您不能附加到不响应附加命令的 Java 进程。因此,动态附加的主要好处是另一方面它的缺点:附加仅适用于活跃且健康的 JVM。
同时,Serviceability Agent 不依赖于 JVM 合作。即使目标进程卡住、死锁、过载或无法服务请求,它也能正常工作。它甚至可以使用 dead JVM。是的,您可以使用 SA 对核心转储进行事后分析。
正如您在标题中看到的,SA 用于调试 JVM。附加机制依赖于 JVM 工作和正常工作的事实 - 从这个角度来看,它对于查找 JVM 本身的错误 in 是没有用的。在这种情况下,您需要一个外部工具,例如 SA。
参考文献
【讨论】: