Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';java进程上的t转储堆_Java_Heap Dump_Jmap - Fatal编程技术网

Can';java进程上的t转储堆

Can';java进程上的t转储堆,java,heap-dump,jmap,Java,Heap Dump,Jmap,我有一个java进程,我想调试它。它的问题是,它有太多打开的连接,所以运行jmap失败,因为它无法连接到进程。 运行jmap-F会产生下一个错误: Attaching to process ID 1772, please wait... sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypeEntryTypeNameOffset" in any of the known libra

我有一个java进程,我想调试它。它的问题是,它有太多打开的连接,所以运行jmap失败,因为它无法连接到进程。 运行jmap-F会产生下一个错误:

Attaching to process ID 1772, 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:388)
        at sun.jvm.hotspot.HotSpotTypeDataBase.getLongValueFromProcess(HotSpotTypeDataBase.java:369)
        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.
正在附加到进程ID 1772,请稍候。。。
sun.jvm.hotspot.debugger.NoSuchSymbolException:在任何已知库名称(libjvm.so、libjvm_g.so、gamma_g)中找不到符号“gHotSpotVMTypeEntryTypeNameOffset”
位于sun.jvm.HotSpotTypeDataBase.lookupInProcess(hostpottypedatabase.java:388)
位于sun.jvm.HotSpotTypeDataBase.getLongValueFromProcess(hostpottypedatabase.java:369)
位于sun.jvm.HotSpotTypeDataBase.readVMTypes(hostpottypedatabase.java:102)
位于sun.jvm.HotSpotTypeDataBase.hostpottypedatabase.java:85)
位于sun.jvm.hotspot.bugspot.BugSpotAgent.setupVM(BugSpotAgent.java:568)
位于sun.jvm.hotspot.bugspot.BugSpotAgent.go(BugSpotAgent.java:494)
位于sun.jvm.hotspot.bugspot.BugSpotAgent.attach(BugSpotAgent.java:332)
位于sun.jvm.hotspot.tools.Tool.start(Tool.java:163)
位于sun.jvm.hotspot.tools.HeapDumper.main(HeapDumper.java:77)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中
位于java.lang.reflect.Method.invoke(Method.java:597)
位于sun.tools.jmap.jmap.runTool(jmap.java:179)
位于sun.tools.jmap.jmap.main(jmap.java:110)
调试器已成功连接。

有什么问题吗?无需重新启动进程就可以解决此问题(重新启动后该错误可能会消失,因此我希望避免它)。

您可以使用Sun 6 JDK的visualvm进行连接吗?它使用了一种不同的方法,允许您学习很多东西——这可能已经足够了——但它不是一个调试器

有什么问题吗?在不重新启动流程的情况下可以解决此问题(重新启动后可能会消失此错误,因此我希望避免它)

冒着陈述显而易见的

如果由于打开的连接太多而无法连接调试器,那么这可能也是您试图查找的错误的根源

尝试使用操作系统级实用程序来找出进程当前打开了哪些文件/套接字等。你会给你一些线索告诉你从哪里开始寻找。如果这还不够,请在代码库中搜索打开文件/套接字的所有位置,并检查它们,以确保它们有一个始终关闭文件/套接字的封闭
try/finally

对于Sun Jvm: 你可以试试新的

HotSpotDiagnostic().dumpHeap("d:\\HeapDump1",true);
如果HotSpotDiagnostic类在编译时不可见,则
您可以将具有HotSpotDiagnosticXBean.class的rt.jar复制到其他位置。使用“添加外部jar”在构建路径中引用复制的jar。这允许您创建对象并获取堆转储。

更多详细信息:其他工具(如jstack)也会出现此问题。Java版本是1.6.0.10-64。系统是Linux SUSE 10 x86_64我从运行应用程序的同一个java安装和同一个用户处运行jmap。我可以看到(某种程度上)哪些套接字是打开的,它确实提供了一些有关问题的线索,但我仍然想要了解整个情况,在这种情况下可能不可能做到这一点。谢谢你的帮助。visualvm可以工作,但没有给我任何有用的信息。我一直在寻找一个堆转储。据我所知,它可以为本地应用程序创建一个堆转储。它仍然失败。可能该过程被卡住了,因此无法检索此信息。我将不得不处理我能收集到的信息。谢谢大家!我认为你认为它卡住了是对的。之后的一个建议是建立一个日志机制,这样你至少可以在事故发生时看到死亡情况。在文件中或可从visualvm访问的位置。