Memoryleak泄漏问题



我检查了所有连接是否正确关闭。仍然得到Java .lang. outofmemoryerror: Java堆空间。为什么我得到OutOfMemoryError。你能建议我需要检查什么吗?有没有办法在不增加堆大小的情况下解决。我没有机会增加堆。请提供解决方案

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

您需要检查哪些对象使用了最多的内存,例如

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

我猜您可能忘记关闭所有JDBC资源,如果您不这样做,这些资源将会累积。

从日志中,看起来您正在执行SQL select

要查询的结果集有多大?如果它返回一个消耗内存的巨大数据集,那么它可能导致OutOfMemory

您可能应该简单地提高分配给程序的内存。检查-Xmx和-Xms属性

您可以使用CodePro Analytix,根据代码缺陷分析您的代码。

您正在使用的数据集有多大?看起来你的查询返回数百万条记录填充内存…尝试使用(如果可能的话)ResultSet或限制数据,以限制内存中的记录数量

最新更新