我们有一个开放测试版的应用程序,它偶尔会导致堆空间溢出。JVM的反应是永久休假。
为了分析这一点,我想要窥探它失败的地方的内存。Java不希望我这样做。该进程仍在内存中,但似乎未被识别为java进程。
所讨论的服务器是debian Lenny服务器,Java 6u14
/opt/jdk/bin# ./jmap -F -dump:format=b,file=/tmp/apidump.hprof 11175
Attaching to process ID 11175, please wait...
sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypeEntryTypeNameOffset" in any of the known library names (libjvm.so, libjvm_g.so, gamma_g)
at sun.jvm.hotspot.HotSpotTypeDataBase.lookupInProcess(HotSpotTypeDataBase.java:390)
at sun.jvm.hotspot.HotSpotTypeDataBase.getLongValueFromProcess(HotSpotTypeDataBase.java:371)
at sun.jvm.hotspot.HotSpotTypeDataBase.readVMTypes(HotSpotTypeDataBase.java:102)
at sun.jvm.hotspot.HotSpotTypeDataBase.<init>(HotSpotTypeDataBase.java:85)
at sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:568)
at sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:494)
at sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:332)
at sun.jvm.hotspot.tools.Tool.start(Tool.java:163)
at sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at sun.tools.jmap.JMap.runTool(JMap.java:179)
at sun.tools.jmap.JMap.main(JMap.java:110)
Debugger attached successfully.
sun.jvm.hotspot.tools.HeapDumper requires a java VM process/core!发布于 2010-05-31 20:56:52
解决方案非常简单。我以root用户身份运行jmap,但我必须以启动jvm的用户身份运行它。我现在要羞愧地把头藏起来。
发布于 2015-09-25 04:50:44
我使用相同的用户运行jmap和应用程序,但仍然收到错误。
解决方案在jmap之前运行命令
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope而不是只使用jmap,就可以正常工作。
jmap -heap 17210发布于 2016-04-05 20:44:09
如果有人试图在Docker容器中获取Java应用程序的堆转储。这是唯一对我有效的解决方案:
docker exec <container-name> jcmd 1 GC.heap_dump /tmp/docker.hprof它基本上是使用pid=1使用jcmd转储进程堆。
请参阅https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr006.html
https://stackoverflow.com/questions/2913948
复制相似问题