【问题标题】:How to fix J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/"my_datasource"如何修复 J2CA0045E:为资源 jdbc/“my_datasource”调用方法 createOrWaitForConnection 时连接不可用
【发布时间】:2018-11-02 07:53:11
【问题描述】:

我在 IBM AIX 7.2 服务器上的 Websphere ND 8.5.5.9 中安装了一个 J2EE 应用程序。 在安装应用程序时,我通过为其提供虚拟值来跳过队列设置。然后,出现了侦听器端口问题,因为队列试图连接到虚拟设置。这样连接池已满,系统开始给出异常。所以,我重新安装了应用程序并将监听器端口保持在停止模式。前几个小时的应用程序按预期运行。现在,它给出了以下例外:

    [5/23/18 17:29:53:609 CEST] 000000a9 FreePool      E   J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/"". 
[5/23/18 17:31:12:899 CEST] 00000055 FreePool      E   J2CA0045E: Connection not available while invoking method createOrWaitForConnection for resource jdbc/"". 
[5/23/18 17:31:12:900 CEST] 00000055 AlarmThreadMo W   UTLS0009W: Alarm Thread "Non-deferrable Alarm : 0" (00000055) previously reported to be delayed has now completed.  It was active for approximately 180004 milliseconds. 
[5/23/18 17:32:11:191 CEST] 00000029 AlarmThreadMo W   UTLS0008W: The return of alarm thread "Non-deferrable Alarm : 2" (00000057) to the alarm thread pool has been delayed for 18271 milliseconds. This may be preventing normal alarm function within the application server. The alarm listener stack trace is as follows:
            at java.lang.Object.wait(Native Method)
            at java.lang.Object.wait(Object.java:201)
            at com.ibm.ejs.j2c.FreePool.queueRequest(FreePool.java:438)
            at com.ibm.ejs.j2c.FreePool.createOrWaitForConnection(FreePool.java:1344)
            at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3898)
            at com.ibm.ejs.j2c.PoolManager.reserve(PoolManager.java:3118)
            at com.ibm.ejs.j2c.ConnectionManager.allocateMCWrapper(ConnectionManager.java:1548)
            at com.ibm.ejs.j2c.ConnectionManager.allocateConnection(ConnectionManager.java:1031)
            at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:646)
            at com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource.getConnection(WSJdbcDataSource.java:924)
            at com.ibm.ws.extensionhelper.db.impl.DatabaseHelperImpl$DSWrapper.getConnection(DatabaseHelperImpl.java:1595)
            at com.ibm.ws.extensionhelper.db.impl.DatabaseHelperImpl.getConnection(DatabaseHelperImpl.java:750)
            at com.ibm.ws.leasemanager.impl.LeaseManagerDBHelper.getConnection(LeaseManagerDBHelper.java:213)
            at com.ibm.ws.leasemanager.impl.LeaseStoreImpl.renew(LeaseStoreImpl.java:452)
            at com.ibm.ws.leasemanager.impl.LeaseImpl.renew(LeaseImpl.java:141)
            at com.ibm.ws.scheduler.LeaseAlarm.alarm(LeaseAlarm.java:173)
            at com.ibm.ejs.util.am._Alarm.runImpl(_Alarm.java:151)
            at com.ibm.ejs.util.am._Alarm.run(_Alarm.java:136)
            at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892).

请建议如何在不更改任何代码的情况下释放连接池。是否可以在操作系统级别或 Websphere 级别处理它?

【问题讨论】:

    标签: websphere datasource connection-pooling websphere-8


    【解决方案1】:

    等待 18 秒的最后一个警告是针对 WAS 调度程序进行的连接尝试。您应该查看您的配置以查看调度程序是否配置为使用与先前错误相同的数据源 jdbc/""(这是一个不寻常的名称 - 此数据源配置正确吗?)。这些错误/警告背后的原因有几种可能性。您的连接池的大小可能不足以处理应用程序所需的负载,或者您的代码可能会长时间保持连接,导致数据源的其他用户饿死。

    【讨论】:

    • 数据源名称配置正确,连接池大小保持为 65。相同的配置在生产环境中运行良好。还有什么我可以尝试使用调度程序的吗?请确保我已保持所有配置正确,相同已被多次交叉检查。
    • 与其关注未分配所需连接的调度程序,我建议关注正在使用/保持连接的任何内容并阻止任何可用的连接。以下链接提供了有关启用和调试 ConnLeakLogic=all 跟踪的良好说明,www-01.ibm.com/support/docview.wss?uid=swg21385033 这应该有助于您调试保持连接打开并耗尽调度程序和其他资源的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 2018-01-15
    • 2015-10-04
    • 2019-11-17
    • 2017-07-04
    相关资源
    最近更新 更多