2016-08-11 162 views
0

我們對我們的應用程序使用WebSphere應用程序服務器,並且經常發生內存不足錯誤。爲了調試這個,我們添加了日誌來檢查在某些地方使用過的內存,下面是觀察結果。WebSphere內存不足錯誤

使用的內存不會減少,直到達到閾值限制。我們使用下面的內存配置:

InitialHeapSize="1024" maximumHeapSize="2048" 

因此,直到它跨越1024內存不釋放。在OOM錯誤的情況下,即使某些線程未被使用,內存也不會被釋放。

我認爲堆大小沒有被釋放。但是,Java運行時API顯示有可用內存。像方法類,字符串操作這樣的Java操作正在工作,但是當JNDI查找出現內存異常時,它的失敗。結果,由於連接不可用,系統失敗。

堆棧跟蹤:

com.ibm.websphere.naming.CannotInstantiateObjectException:當JNDI NamingManager正在處理一個javax.naming.Reference中對象時發生異常。 [根異常是java.lang.OutOfMemoryError] at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:1033) at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers。 java:730)

+0

[java.lang.OutOfMemoryError:Java堆空間]的可能重複(http://stackoverflow.com/questions/1596009/java-lang-outofmemoryerror-java-heap-space) –

回答

1

Dynamo,您將不得不執行堆分析以找出導致您的OOM的原因。這是一個免費的工具,可以讓你找出在服務器中導致問題的原因。可能是一個流氓應用程序阻止太多的內存或資源泄漏太多的內存等。

你可以看看這個瞭解更多信息。你的初始堆和最大堆的設置爲你想要的東西調整(如果你有太深的GC,你的CPU將GC在非常高VS恆定的開銷使用問題,如果過於頻繁)

https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

1

您必須透過wasadminHeap DumpThread Dump和分析問題的根源

0

會有因平臺和版本您使用的一些差異,但是,有內置支持產生堆轉儲:

見,例如:

http://www.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/tprf_enablingheapdump.html

一般情況下,你要麼要啓用代堆轉儲,那麼強制OOM,然後用HeapAnalyzer來分析所產生的堆轉儲。或者,可以在看到大量內存使用情況時手動生成堆。

一些警告:看起來像內存泄漏可能是一個非常大但瞬時內存使用。隨着時間的推移,內存使用情況的視圖將需要得出存在實際泄漏的結論。

無論如何,處理這類問題的途徑不可避免地會導致產生堆轉儲和分析。