我们已将应用程序部署在weblogic 12c上,并且日志中出现间歇性的后续异常
java.lang.OutOfMemoryError:超出了GC开销限制
当我同时看到应用程序log4j日志时,我可以看到以下异常
异常[EclipseLink-4002](Eclipse持久性服务- 2.5.2.v20140319-9ad6abd):org.eclipse.persistence.exceptions.DatabaseException内部 异常:weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException:无资源 当前在池TMP_DS_RW中可用以分配给应用程序, 请增加池的大小,然后重试。错误代码:0
原因:weblogic.jdbc.extensions.PoolLimitSQLException: weblogic.common.resourcepool.ResourceLimitException:无资源 当前在池TMP_DS_RW中可用以分配给应用程序, 请增加池的大小,然后重试。.
这是由于池中的连接数耗尽而发生的吗?
weblogic的连接池大小和java.lang.OutOfMemoryError之间是否有任何关系?
因为每当池连接似乎耗尽时,我们都面临着java.lang.OutOfMemoryError。
我们尝试将堆大小从1GB增加到2GB,但是一段时间后我们仍然面临着java.lang.OutOfMemoryError。
在问题中使用eclipse堆转储分析器后,怀疑它正在显示
由“系统类”加载的类“ java.lang.ref.Finalizer” 加载程序”,占用了9,935,880(69.45%)字节。
注意::在weblogic的jndi datsource配置的“连接池”选项卡中,“最大容量”设置为30,并且我们正在使用oracle数据库。
答案 0 :(得分:1)
由于数据库连接使用内存,因此可能。您的应用程序必须泄漏了连接池。尝试查看您的应用程序代码,并检查其在使用后是否正确释放数据库连接。
答案 1 :(得分:1)
java.lang.OutOfMemoryError:超出了GC开销限制
满足以下所有条件时,将引发此错误:
- 在完整GC中花费的时间超过了 -XX:GCTimeLimit = N标志默认值为98(即,如果98%的时间都花在了 GC)。
- 完整GC回收的内存量小于以下指定的值: -XX:GCHeapFreeLimit = N标志。缺省值为2,表示如果 在完整的GC期间,只有不到2%的堆被释放,可以满足此条件。
- 以上两个条件在五个连续的完整GC周期中均成立(即 值不可调整)。 堆分析| 187
- -XX:+ UseGCOverheadLimit标志的值为true(默认情况下为默认值)。
来源:《 Java性能》权威指南
如果增加堆大小不能解决问题,请检查CPU是否不是瓶颈。
-XX:+PrintGCDetails
-Xloggc:<path>
这会将有关GC的信息记录到。如果看到堆大小不停地增加,则可能发生内存泄漏,并且可能没有关闭连接。
答案 2 :(得分:0)
您是否尝试监视来自WebLogic控制台的连接? 服务->数据源->(选择数据源)->(选项卡)监视,在那里您应该具有连接的“实时”视图。