如何从HashiCorp Nomad运行的java应用程序中获取堆转储?

如何从HashiCorp Nomad运行的java应用程序中获取堆转储?,java,jvm,heap,dump,nomad,Java,Jvm,Heap,Dump,Nomad,我有一个由HashiCorp Nomad运行的java应用程序。在进程状态输出时,nomad executor进程由root运行,java应用程序进程由nobody运行 当我尝试执行命令时: jmap-dump:format=b,file=filename.bin 我得到消息: 无法打开套接字文件:目标进程未响应或热点VM未加载 当目标进程没有响应时,可以使用-F选项 当我尝试执行命令时:jmap-dump:format=b,file=filename.bin-F 我找到了下一条线索: 正在从可

我有一个由HashiCorp Nomad运行的java应用程序。在进程状态输出时,nomad executor进程由
root运行,java应用程序进程由
nobody运行

当我尝试执行命令时:
jmap-dump:format=b,file=filename.bin

我得到消息:

无法打开套接字文件:目标进程未响应或热点VM未加载
当目标进程没有响应时,可以使用-F选项

当我尝试执行命令时:
jmap-dump:format=b,file=filename.bin-F

我找到了下一条线索:

正在从可执行文件5584附加到core-F,请稍候。。。
附加到核心文件时出错:无法打开二进制文件
sun.jvm.hotspot.debugger.DebuggerException:无法打开二进制文件
位于sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach0(本机方法)
位于sun.jvm.hotspot.debugger.linux.LinuxDebuggerLocal.attach(LinuxDebuggerLocal.java:286)
在sun.jvm.hotspot.hostpotagent.attachDebugger(hostpotagent.java:673)中
位于sun.jvm.hotspot.hostpotagent.setupDebuggerLinux(hostpotagent.java:611)
位于sun.jvm.hotspot.hostpotagent.setupDebugger(hostpotagent.java:337)
位于sun.jvm.hotspot.hostpotagent.go(hostpotagent.java:304)
位于sun.jvm.hotspot.hostpotagent.attach(hostpotagent.java:156)
位于sun.jvm.hotspot.tools.Tool.start(Tool.java:191)
位于sun.jvm.hotspot.tools.Tool.execute(Tool.java:118)
位于sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:83)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于sun.tools.jmap.jmap.runTool(jmap.java:201)
位于sun.tools.jmap.jmap.main(jmap.java:130)

jmap
without-F应该由与目标Java进程相同的用户运行(在您的情况下,
nobody

jmap-F
应该由root运行,
-F
参数应该在
前面

jmap -dump:format=b,file=filename.bin -F <app_pid>