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

标签 java jvm jvm-hotspot heap-dump jmap

我正在尝试运行和调试来自 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 上运行的“调试服务器”。

在 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 从目标进程中直接执行。

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

关于java - JMap.java - 尝试连接到调试服务器时超时 - SwDbgSrv.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30677871/

相关文章:

java - 在 TextView 中设置数字的自定义格式

java - 如果可以控制两端,Java 的开发版本和部署版本是否应该相同?

java - 为什么switch on String会编译成两个switch

java - 将部分 Java 虚拟机捆绑到一个项目中

java - 对于 HotSpot JIT, "already compiled into a big method"是什么意思?

java - 无法从 Weblogic Server 10.3.6 生成 JFR 报告

java - 关于 while 循环的困惑

java - 如何使用泛型进行 instanceof 和类型转换

java - 正确序列化java中的对象

java - ASP.NET/.net 新手问题 - Java Hotspot 等效项?