2012-04-03 61 views
0

我有一台运行带有750兆permgen空间的3gb JVM的服务器。即使在这个愚蠢的应用程序中抛出更多的硬件后,我仍然偶尔会遇到内存堆转储。我需要弄清楚事故发生时的情况,但是我的分析工具有问题。Java堆转储分析工具不断崩溃

JVM在AS/400硬件上运行,这意味着我需要IBM的PowerPC版本的JVM。当然,IBM是IBM,他们将转储文件的格式从标准Sun(Oracle)版本更改为定制IBM版本。显然,那里唯一的转储分析工具是作为Eclipse插件构建的,该插件有一个IBM插件,允许它读取IBM的定制转储文件。

那就是配置,现在是问题。绝对最大的我可以启动我的笔记本电脑上的JVM是4800 megs 4700 meg permgen。 Eclipse将不会运行,设置的任何更高,我怀疑,因为这需要我的笔记本电脑的可用内存的100%以上。即使所有这些空间,Eclipse都会给我堆堆试图分析文件。

有没有其他的分析工具,不需要我有一个比JVM更大的JVM试图分析?

这里是从哪儿日食崩溃

!ENTRY org.eclipse.core.jobs 4 2 2012-04-02 12:08:10.540 
!MESSAGE An internal error occurred during: "Parsing heap dump from 'C:\Users\slepecw\Code\Larry-Heap-Dumps\20110612\heapdump.20110612.165113.17755.0003.phd'". 
!STACK 0 
java.lang.OutOfMemoryError: Java heap space 
    at java.util.Arrays.copyOf(Arrays.java:2882) 
    at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100) 
    at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:515) 
    at java.lang.StringBuilder.append(StringBuilder.java:189) 
    at org.apache.commons.io.output.StringBuilderWriter.write(StringBuilderWriter.java:138) 
    at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1365) 
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1340) 
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:1287) 
    at org.apache.commons.io.IOUtils.toString(IOUtils.java:502) 
    at org.eclipse.wb.internal.core.editor.describer.JavaSourceUiDescriber.describe(JavaSourceUiDescriber.java:51) 
    at org.eclipse.core.internal.content.ContentTypeCatalog.describe(ContentTypeCatalog.java:218) 
    at org.eclipse.core.internal.content.ContentTypeCatalog.collectMatchingByContents(ContentTypeCatalog.java:190) 
    at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:401) 
    at org.eclipse.core.internal.content.ContentTypeCatalog.internalFindContentTypesFor(ContentTypeCatalog.java:450) 
    at org.eclipse.core.internal.content.ContentTypeCatalog.findContentTypesFor(ContentTypeCatalog.java:298) 
    at org.eclipse.core.internal.content.ContentTypeMatcher.findContentTypesFor(ContentTypeMatcher.java:57) 
    at org.eclipse.mat.dtfj.DTFJIndexBuilder.getDynamicDTFJDump(DTFJIndexBuilder.java:7940) 
    at org.eclipse.mat.dtfj.DTFJIndexBuilder.getUncachedDump(DTFJIndexBuilder.java:7862) 
    at org.eclipse.mat.dtfj.DTFJIndexBuilder.getDump(DTFJIndexBuilder.java:7675) 
    at org.eclipse.mat.dtfj.DTFJIndexBuilder.fill(DTFJIndexBuilder.java:579) 
    at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.parse(SnapshotFactoryImpl.java:203) 
    at org.eclipse.mat.parser.internal.SnapshotFactoryImpl.openSnapshot(SnapshotFactoryImpl.java:114) 
    at org.eclipse.mat.snapshot.SnapshotFactory.openSnapshot(SnapshotFactory.java:145) 
    at org.eclipse.mat.ui.snapshot.ParseHeapDumpJob.run(ParseHeapDumpJob.java:83) 
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) 
!SESSION 2012-04-02 12:39:07.107 ----------------------------------------------- 
eclipse.buildId=M20110909-1335 
java.version=1.6.0_30 
java.vendor=Sun Microsystems Inc. 
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=en_US 
Framework arguments: -product org.eclipse.epp.package.java.product 
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.eclipse.epp.package.java.product 
+0

你如何运行MAT?从ISA内部?如果是这样,你怎么提高-Xmx? (即:你怎么能确定它的生效?) – 2012-04-04 06:14:48

回答

0

Eclipse Memory Analyzer(MAT)日志条目是分析堆转储的最佳工具。

+0

是啊,这是即时通讯使用和有问题。 – scphantm 2012-04-03 17:45:59

+1

你不需要增加太多的Eclipse内存。我已经成功地使用运行在少于1Gb内存的Eclipse上分析了几个Gb转储。 Sun的JHat工具甚至没有打开这些转储。无论如何,你没有详细解释你在转储分析工具中遇到的问题。 – 2012-04-03 18:19:45

+0

我在上面添加了eclipse日志文件。即使JVM的启动速度如此之高,您也会看到结果。我没有尝试过的一件事是独立MAT。是否可以将IBM插件安装到独立版本中? – scphantm 2012-04-03 19:30:25