2013-03-14 86 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或限制数据,限制内存中的记录数量