6

我正在使用 ASANT 运行一个指向 NARS.jar 文件的 xml 文件。

我得到“java.lang.OutOfMemoryError: Java heap space”,我正在研究这个。

所以我发现我需要设置“-XX:+HeapDumpOnOutOfMemoryError”,来创建一个转储文件来分析。

我编辑了 ASANT.bat 并将“-XX:+HeapDumpOnOutOfMemoryError”添加到 ANT_OPTS:

set ANT_OPTS= "-XX:+HeapDumpOnOutOfMemoryError" "-Dos.name=Windows_NT" "-Djava.library.path=%AS_INSTALL%\lib;%AS_ICU_LIB%;%AS_NSS%" "-Dcom.sun.aas.installRoot=%AS_INSTALL%" "-Dcom.sun.aas.instanceRoot=%AS_INSTALL%" "-Dcom.sun.aas.instanceName=server" "-Dcom.sun.aas.configRoot=%AS_CONFIG%" "-Dcom.sun.aas.processLauncher=SE" "-Dderby.root=%AS_DERBY_INSTALL%"  

但我似乎找不到任何转储文件。当我找到转储时,我将使用 Eclipse 内存分析器进行分析。

我还尝试设置选项“-XX:HeapDumpPath=c:\memdump\bds.hprof”,但没有在那里创建转储。

有人知道我做错了什么吗?提前致谢

4

5 回答 5

2

看起来您的应用程序正在 Windows 上运行。Windows 文件路径需要使用\. 根据您的示例, -XX:HeapDumpPath 应如下所示:

-XX:HeapDumpPath=c:\\memdump\\bds.hprof

除了 '-XX:+HeapDumpOnOutOfMemoryError' 之外,还有其他几个选项可以捕获堆转储

于 2018-03-30T10:46:38.230 回答
1

我发现我可以使用 SUN 的 VisualVM 来获取堆转储,并实时查看。

简单的解决方案

于 2010-03-09T14:27:17.783 回答
1

它位于应用程序的工作目录中(即您启动它的位置)。我不确定如果该进程没有必要的权限会发生什么。可能,写转储会默默地失败。

于 2010-03-09T14:37:33.320 回答
1

你确定ANT是OOME的进程吗?它可能是由 ANT 启动的进程。

将“-debug”添加到 ANT_OPTS 以获取调试信息。

您是否看到在执行过程中打印出目标?

您还可以分叉由 ant 启动的各种进程(会减慢速度,但可能有助于隔离罪魁祸首)

最后,也许您只需要比默认设置更多的内存。添加:

-Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m

到 ANT_OPTS

于 2010-03-09T19:05:50.383 回答
-1

嗯... java.io.tmpdir 指向的地方怎么样?

于 2010-03-09T14:05:39.503 回答