Tomcat 7 - 忽略数据库连接池参数 (DBCP)
Posted
技术标签:
【中文标题】Tomcat 7 - 忽略数据库连接池参数 (DBCP)【英文标题】:Tomcat 7 - Ignoring db conections pool parameters (DBCP) 【发布时间】:2019-09-25 04:09:03 【问题描述】:我们面临一个问题,即在 Tomcat 7 重新启动期间与数据库建立的连接数爆炸式增长。
我们的配置如下,在 Tomcat 的 context.xml 中设置:
<Resource auth="Container"
driverClassName="oracle.jdbc.driver.OracleDriver"
initialSize="1"
maxActive="10"
maxAge="600000"
maxIdle="5"
maxOpenPreparedStatements="200"
maxWait="10000"
minEvictableIdleTimeMillis="60000"
minIdle="0"
name="jdbc/backoffice"
password="backoffice"
poolPreparedStatements="true"
rollbackOnReturn="true"
testWhileIdle="true"
timeBetweenEvictionRunsMillis="6000000"
type="javax.sql.DataSource"
url="jdbc:oracle:thin:@127.0.0.1:1521:DATABASE"
username="backoffice"
validationQuery="SELECT SYSDATE FROM DUAL"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true"
/>
Tomcat 重启后,打开的连接数接近 700。 重新部署战争(重命名为“.war_bk”或重命名回“.war”)解决了问题。
为什么会这样? 我们可以做些什么不同的事情?
【问题讨论】:
Tomcat 是否有可能没有完全关闭?我以前见过这个,Tomcat 的java
进程仍在运行,但释放了 TCP 端口,因此下一次启动工作正常。当你重新部署时,可能会发生类似的事情。
@a_horse_with_no_name 我们总是使用“ps -ef | grep java”检查tomcat是否关闭(在问题开始之前)。如果它还没有倒下,我们就杀了它。无论如何,我们认为如果是问题所在,连接数将接近设置为池限制的两倍,但它接近 700。
tomcat 运行在哪个操作系统上?你如何重新启动tomcat?请发布确切的命令。
@LuisMuñoz 它在 CentOS 上运行。 “service tomcat stop”,之后我们使用“ps -ef | grep tomcat”检查并开始使用“service tomcat start”。
查看war里面的context.xml,可能有重复资源。
【参考方案1】:
也为maxConnLifetimeMillis添加值
maxConnLifetimeMillis -1 连接的最大生命周期(以毫秒为单位)。超过此时间后,连接将无法通过下一次激活、钝化或验证测试。值为零或更小意味着连接具有无限的生命周期。
还有maxTotal
maxTotal 8 可以同时从此池中分配的最大活动连接数,或者为负数表示无限制。
您可以将validationQuery
更改为更简单的查询
validationQuery="SELECT 1 FROM DUAL"
【讨论】:
以上是关于Tomcat 7 - 忽略数据库连接池参数 (DBCP)的主要内容,如果未能解决你的问题,请参考以下文章