我有一个在 jboss eap 6.3 下运行并通过 jTDS 驱动程序连接到 SQL SERVER 2012 数据源的应用程序。问题是连接被打开并且永远不会返回到池中。
起初,没有连接泄漏。我已经使用下面的配置配置了 jboss 来调查这个问题:
<cached-connection-manager debug="true" error="true"/>
Jboss 发现了一个连接泄漏(在一个语句中)并且我修复了它,但问题仍然存在。
数据库配置如下:
<datasource jta="false" jndi-name="java:jboss/datasources/DatabaseDS" pool-name="DatabaseDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:jtds:sqlserver://server/database;instance=instance;DatabaseName=database</connection-url>
<driver>jtds</driver>
<pool>
<min-pool-size>200</min-pool-size>
<max-pool-size>1200</max-pool-size>
<prefill>true</prefill>
</pool>
<security>
<user-name>username</user-name>
<password>password</password>
</security>
<timeout>
<blocking-timeout-millis>30000</blocking-timeout-millis>
<idle-timeout-minutes>1</idle-timeout-minutes>
</timeout>
在生产一天后,jboss-cli 的统计显示如下数据:
“使用中”分数始终与“活动计数”大小相同。这个数字对我来说没有意义,因为对于每个请求,我们只打开和关闭一个连接,并且在打印时,有 98 个会话连接到 jboss。
调查此应用程序的 SQL Server 进程 (master.dbo.sysprocesses) 所有“活动计数”连接都处于“等待命令”状态并详细说明为“睡眠”
我 100% 确定所有打开的连接也在应用程序中关闭。
大约 2 天后,池 100 % 完成,需要重新启动服务器
什么可能导致这种行为?“活动计数”的值不应该是 200 吗?哪些可能会阻止连接返回池?