我的要求是使用Jmap创建远程服务器堆内存的转储文件。 我这样做了。
jmap -dump:file=remoteDump.txt,format=b 3104
这很好,因为3104是来自我本地机器的进程的pid。 如何使用远程服务器执行相同的操作? 我试过了
jmap -dump:file=remoteDump.txt,format=b 3104 54.197.228.33:8080
但它失败了。 我尝试使用jsadebugd创建一个调试服务器,如下所示。 1.开始的rmiregistry
rmiregistry -J-Xbootclasspath / p:$ JAVA_HOME / lib / sa-jdi.jar
2.Ran jsadebugd
>jsadebugd 11594 54.197.228.33:9009
但是第2步抛出了以下错误:
Error attaching to process or starting server: sun.jvm.hotspot.debugger.D
Exception: Windbg Error: WaitForEvent failed!
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach0(Na
thod)
at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach(Win
ggerLocal.java:152)
at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:
at sun.jvm.hotspot.HotSpotAgent.setupDebuggerWin32(HotSpotAgent.j
)
at sun.jvm.hotspot.HotSpotAgent.setupDebugger(HotSpotAgent.java:3
at sun.jvm.hotspot.HotSpotAgent.go(HotSpotAgent.java:313)
at sun.jvm.hotspot.HotSpotAgent.startServer(HotSpotAgent.java:220
at sun.jvm.hotspot.DebugServer.run(DebugServer.java:106)
at sun.jvm.hotspot.DebugServer.main(DebugServer.java:45)
at sun.jvm.hotspot.jdi.SADebugServer.main(SADebugServer.java:55)
帮助我摆脱它。
答案 0 :(得分:2)
你无法附加到进程的原因可能就是你已准备好附加到某个debuger或在其jmap
正在运行的其他可视机器上执行。
尝试确保该流程未附加到任何debuger并且您附加到同一个VM。