2010-03-09 70 views
5

我使用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

運行Java 5順便說一句 – Ikky 2010-03-09 13:56:52

+0

聽起來就像是需要在其上*過程遇到的問題*附加細節。 – Pat 2010-03-15 01:18:04

回答

1

我發現我可以使用SUN的VisualVM來獲取heapdump,並且可以直接看到它。

簡單的解決方案

-1

嗯...怎麼樣java.io.tmpdir指向哪裏?

1

它在(你已經開始它即)應用程序的工作目錄。我不確定如果流程沒有必要的權限,會發生什麼情況。寫作轉儲可能會失敗。

1

你確定ANT是OOME的過程嗎?這可能是由ANT啓動的一個過程。

將「-debug」添加到ANT_OPTS以獲取調試信息。

您是否看到在執行過程中打印出的目標?

您也可以通過叉螞蟻(會慢下來,但可以幫助找出罪魁禍首)

最後啓動的各種過程,也許你只是需要比默認更多的內存。添加:

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

到ANT_OPTS

+0

感謝您的好建議,但他們都沒有幫助。 我也嘗試在xml文件中設置fork =「yes」,但這沒有幫助。 – Ikky 2010-03-10 11:01:03