我正在使用ASANT来运行指向NARS.jar文件的xml文件。
我收到“java.lang.OutOfMemoryError:Java堆空间”,我正在研究这个问题。
所以我发现我需要设置“-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 Memory Analyzer来分析何时找到转储。
我还尝试设置选项“-XX:HeapDumpPath = c:\ memdump \ bds.hprof”,但没有在那里创建转储。
任何人都知道我做错了什么? 提前致谢
答案 0 :(得分:1)
我发现我可以使用SUN的VisualVM来获取堆转储,然后看到它。
简易解决方案
答案 1 :(得分:1)
它位于应用程序的工作目录中(即您启动它的位置)。如果进程没有必要的权限,我不确定会发生什么。也许,编写转储会无声地失败。
答案 2 :(得分:1)
你确定ANT是OOME的过程吗?它可能是由ANT启动的过程。
将“-debug”添加到ANT_OPTS以获取调试信息。
您是否在执行过程中看到目标被打印出来?
你也可以分叉由ant启动的各种进程(会减慢速度,但可能有助于隔离罪魁祸首)
最后,也许您只需要比默认内存更多的内存。添加:
-Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m
到ANT_OPTS
答案 3 :(得分:1)
您的应用程序似乎在Windows上运行。需要使用\
转义Windows文件路径。根据您的示例,-XX:HeapDumpPath应如下所示:
-XX:HeapDumpPath=c:\\memdump\\bds.hprof
除了'-XX:+ HeapDumpOnOutOfMemoryError'之外,还有几个other options to capture heap dumps。
答案 4 :(得分:-1)
嗯...... java.io.tmpdir指向的地方怎么样?