JBOSS AS 7.1.1.Final关闭泄漏连接?

时间:2014-07-22 10:10:28

标签: java jboss database-connection jboss7.x connection-pooling

我已经在standalone.xml中完成了以下设置:

<datasource jta="true" jndi-name="java:jboss/datasources/myDS" pool-name="java:jboss/datasources/myDS" enabled="true" use-ccm="true">
<cached-connection-manager debug="true" error="true"/>

因此,我也收到了诸如&#34;为您关闭连接的消息&#34;为:

INFO  [org.jboss.jca.core.api.connectionmanager.ccm.CachedConnectionManager] (http--0.0.0.0-8080-160) IJ000100: Closing a connection for you. Please close them yourself: org.jboss.jca.adapters.jdbc.jdk6.WrappedConnectionJDK6@5cdb81dc: java.lang.Throwable: STACKTRACE
    at org.jboss.jca.core.connectionmanager.ccm.CachedConnectionManagerImpl.registerConnection(CachedConnectionManagerImpl.java:265)
    at org.jboss.jca.core.connectionmanager.AbstractConnectionManager.allocateConnection(AbstractConnectionManager.java:495)
    at org.jboss.jca.adapters.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:129)

尽管如此,有时我的游泳池已经筋疲力尽了。它按照定义超出200的连接。为什么?

<min-pool-size>30</min-pool-size>
<max-pool-size>200</max-pool-size>

没有办法,我的应用程序需要这么多连接。 肯定有连接泄漏。如果是这样的话,为什么当我按照上述说法启用设置时,jboss没有按照它自己关闭它:

<datasource jta="true" jndi-name="java:jboss/datasources/myDS" pool-name="java:jboss/datasources/myDS" enabled="true" use-ccm="true">
<cached-connection-manager debug="true" error="true"/>

如何解决?

感谢。

2 个答案:

答案 0 :(得分:3)

JBoss无法关闭所有泄露的连接。

您需要在启用JCA日志记录后通过检查日志来查找泄漏的连接。我通过这种方式解决了连接泄漏问题。

<logger category="org.jboss.jca">
                <level name="DEBUG"/>
</logger>

您将在日志中获得以下条目

DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-4) {JNDI_NAME}: getConnection(null, null) [1/100] --> 表示从游泳池获取连接。

DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-4) {JNDI_NAME}: returnConnection(607e334, false) [1/99] - &gt; 表示返回与池的连接

您可以检查哪个查询没有返回到池的连接,并检查您的应用程序从哪个查询执行。解决它。

答案 1 :(得分:2)

有关Neeraj答案的更多信息。

DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (MSC service thread 1-4) {JNDI_NAME}: getConnection(null, null) [1/100]

最后的[1/100]是[有效连接/可用连接],其中:

active connections = createdCount - destroyedCount

available connections = maxPoolSize - inUseCount