JMap.java - 尝试连接到调试服务器时超时 - SwDbgSrv.exe

JMap.java - Timed out while attempting to connect to debug server - SwDbgSrv.exe

我正在尝试 运行 并调试来自 sun.jvm.hotspot.tools 和 sun.jvm.hotspot.utilities (如 JMap.java)以便更好地理解正在发生的事情。

不幸的是,我很早就遇到了以下错误消息,甚至没有进行大量调试:

Attaching to process ID 5144, please wait...
Error attaching to process: Timed out while attempting to connect to debug server (please start SwDbgSrv.exe)

无论出于何种原因,这些工具似乎都在尝试连接到端口 27000 上的 "debug server" 运行ning。

在 sun.jvm.hotspot.tools.HeapDumer.java 的文档中,我发现了以下内容:

This tool is used by the JDK jmap utility to dump the heap of the target process/core as a HPROF binary file. It can also be used as a standalone tool if required.

所以我(也许天真地)假设 jmap.exe 正在以某种方式使用它,但是我在使用 jmap 创建堆转储时从未遇到过此类问题。我从来不需要先开始另一个过程。

有什么想法可以直接从我的开发环境中 运行 所有这些工具吗?

谢谢

sun.jvm.hotspot.* 工具是 HotSpot Serviceability Agent 的一部分。

我假设您在 Windows 上使用 JDK 6,因为自 JDK 7 以来不再需要调试服务器。在早期版本中,您必须启动 SwDbgSrv.exe为了使用可服务性代理。

一些内置的 JDK 实用程序(jmap、jstack)有两种执行模式:合作和强制。在正常协作模式下,这些工具使用 Dynamic Attach Mechanism 连接到目标 VM。请求的命令然后由目标 VM 从目标进程中直接执行。

强制模式(jmap -F、jstack -F)的行为完全不同。该工具暂停目标进程,然后使用可维护性代理读取进程内存。该命令在目标 VM 暂停时在工具的进程中执行。这就是 sun.jvm.hotspot.* 实用程序所做的。