在“内存不足”后查找堆转储的位置
我使用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”,但没有创建转储。
任何人都知道我做错了什么? 在此先感谢
我发现我可以使用SUN的VisualVM来获取heapdump,并且可以直接看到它。
简单的解决方案
嗯...怎么样java.io.tmpdir指向哪里?
它在(你已经开始它即)应用程序的工作目录。我不确定如果流程没有必要的权限,会发生什么情况。写作转储可能会失败。
你确定ANT是OOME的过程吗?这可能是由ANT启动的一个过程。
将“-debug”添加到ANT_OPTS以获取调试信息。
您是否看到在执行过程中打印出的目标?
您也可以通过叉蚂蚁(会慢下来,但可以帮助找出罪魁祸首)
最后启动的各种过程,也许你只是需要比默认更多的内存。添加:
-Xms256m -Xmx512m -XX:PermSize=64m -XX:MaxPermSize=256m
到ANT_OPTS
感谢您的好建议,但他们都没有帮助。 我也尝试在xml文件中设置fork =“yes”,但这没有帮助。 – Ikky 2010-03-10 11:01:03
运行Java 5顺便说一句 – Ikky 2010-03-09 13:56:52
听起来就像是需要在其上*过程遇到的问题*附加细节。 – Pat 2010-03-15 01:18:04