【发布时间】:2019-09-30 09:42:15
【问题描述】:
我们在 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”,由“系统类”加载 loader”,占用 9,935,880 (69.45%) 字节。
注意:在weblogic中jndi datsource配置的连接池选项卡中最大容量设置为30,我们使用的是oracle数据库。
【问题讨论】:
-
9,935,880 (69.45%) 是什么?我问这个问题是因为 1GB 或 2GB 要大得多
-
@devwebcl - 1 GB
-
最好的方法是让堆进行分析。可能是复制自stackoverflow.com/questions/1393486/…
-
池连接耗尽意味着您的数据库操作处于负载状态。同样的负载也可以解释为什么您几乎在同一时间耗尽了内存。您需要分析服务器中正在发生的事情的性能,以确定应该做什么。增加连接数可能会导致使用更多内存,而相反,减少连接数可能会导致线程等待时间延长,从而产生瓶颈,从而降低整体内存消耗。这完全取决于您的应用在做什么。
标签: java spring oracle weblogic eclipselink