2010-03-18 47 views
-2

嗨,我們正在使用unix環境中運行的進程之一的內存異常。如何識別錯誤(我們發現在我們的java進程中內存泄漏的可能性很小)。所以whatelse我們需要分析找到rootcauasejava中的內存溢出錯誤

+2

>>我們發現在我們的java進程中內存泄漏的可能性很小 您究竟做了什麼來得出這個結論?您是否使用JMX並監視堆使用情況?應用程序試圖做什麼? – jagamot 2010-03-18 17:22:20

+6

@anil:如果你的Java代碼和你的問題以及問題標題一樣寫得很好,我建議你再仔細看一下代碼,以確保它不會泄漏;) – SyntaxT3rr0r 2010-03-18 17:25:29

+2

幸運的是,你不是第一個遇到這個問題的人,所以有關於這個問題的很多問題(和答案):) http://stackoverflow.com/search?q=outofmemoryerror標準答案是:「第一個配置文件(http://java-source.net/open-source/性能分析器)應用程序並根據結果確定內存泄漏或爲其提供更多內存「。真的沒有其他辦法。 – BalusC 2010-03-18 17:37:27

回答

1

我會使用像YourKithomepage)事件探查器,讓您可以輕鬆地查找被分配這麼多的內存建議。

在任何情況下,您都應該檢查爲您的JVM指定了哪些設置,以瞭解您的程序是否需要更多堆內存。您可以通過指定-X PARAMS設置:

java -Xmx2g -Xms512m 

將開始與JVM最大堆和512MB

0

的起始大小的2Gb的如果沒有內存泄漏,那麼應用程序需要更多的內存。你是否離開堆內存,或者內存或本地內存?對於堆內存和perm內存,您可以分別使用-Xmx.or -XX:PermSize參數來增加分配。

但首先嚐試使用探查器來驗證您的應用程序是否真的沒有泄漏任何內存。