2013-03-14 137 views
0

我檢查了我所有的連接都被closed.still得到java.lang.OutOfMemoryError:Java堆space.Why我得到OutOfMemoryError.can你請建議我需要檢查。是否有任何方法可以解決而不增加堆大小。 我力有機會營養不良的人口增加heap.please提供任何解決方案Memoryleak泄漏問題

2013-01-18 02:42:11,487|INFO||GatewayOutboundPollerDaemon|Begin pollGatewayIncident(). 
2013-01-18 02:42:32,225|INFO||GatewayOutboundPollerDbHelper|Begin submitPendingRecords(). 
2013-01-18 02:42:54,565|INFO||GatewayOutboundPollerDbHelper|Query for Pending Records : SELECT TR_GATEWAY_RECORD_ID, decode(TR_TRANSACTION_TY 
PE,1,'Update','Create')TR_TRANSACTION_TYPE, TR_GATEWAY_RECORD_STATUS FROM TM4530_INCIDENT_GATEWAY WHERE TR_GATEWAY_RECORD_STATUS = 0 AND TR_F 
ROM_PARTNER = 'RAM' AND TR_GATEWAY_RECORD_STATE = 0 AND TR_TRANSACTION_METHOD = 1 FOR UPDATE 
2013-01-18 02:49:47,527|ERROR||DaemonExecutor|ExecutableDaemon threw an exception: 
java.lang.OutOfMemoryError: Java heap space 

回答

2

您需要檢查哪些對象,例如,使用最多的內存

jmap -histo:live {pid} | head -30 

在猜測你可能會忘記關閉只要你不將累計所有你JDBC資源。

0

您應該簡單地提高分配給程序的內存。 檢查您的-Xmx和-Xms屬性。

+0

每次出現OutOfMemory錯誤時增加內存是非常不好的做法。 看看最新的內存使用情況並嘗試改進。 您應該增加內存的唯一時間是當您的應用程序內存佔用量大於可用內存總量的x百分比時...... 通過在修復內存耗盡之前添加更多內存,您可以簡單地將問題一直移動到再次用完所有內存... – NeilA 2013-03-14 08:22:53

+0

不知道能夠知道user1648803的項目有多大,我的答案只是檢查內存參數。在我看來,花時間尋找哪部分代碼負責內存泄漏,而不至少對內存屬性進行瀏覽並不是一個好主意。 – javadev 2013-03-14 08:31:33

1

從日誌中,它看起來像你正在做的SQL選擇

多大您要查詢出來的結果集?如果它返回一個消耗內存的巨大數據集,那麼它可能會導致OutOfMemory

0

您正在使用的數據集有多大? 它看起來像你的查詢返回數百萬記錄填滿內存... 嘗試使用(如果可能)ResultSet或限制數據,限制內存中的記錄數量