为什么mysql连接长时间处于关闭等待状态?

llycmphe  于 2021-06-17  发布在  Mysql
关注(0)|答案(0)|浏览(229)

在我的springmvcweb应用程序中,我使用c3p0作为mysql连接池。c3p0的 maxIdleTime 设置为1500秒,在mysql配置下 wait_timeout 设置为1800秒。
我的观察是,每当我执行命令 netstat -tanop 在ubuntuweb服务器上我看到太多了 CLOSE_WAIT 到mysql db服务器的tcp连接。

如果我在db server上运行netstat来检查发生了什么,那么 CLOSE_WAIT web服务器上的状态为“开” FIN_WAIT2 数据库服务器上的状态。它会保持一段时间(60秒),并从db服务器关闭,但在web服务器上,该连接仍然保持 CLOSE_WAIT (大多接近7200秒)。
为什么web服务器上的连接保持在 CLOSE_WAIT 即使数据库服务器上的同一个连接被关闭,也要声明吗?
我试着设置 net.ipv4.tcp_tw_reuse 但一切都没变。
我确信在web应用程序中没有db连接泄漏,因为我启用了c3p0的属性,这可能有助于查找db泄漏。

debugUnreturnedConnectionStackTraces=true
unreturnedConnectionTimeout=30

如果连接未关闭30秒,此设置会记录异常,并将其视为数据库泄漏。
更新
web应用中配置的c3p0属性:

minPoolSize=10
acquireIncrement=1
maxPoolSize=500
initialPoolSize=10
numHelperThreads=100
maxIdleTime=2400
maxStatements=20
maxStatementsPerConnection=5
idleConnectionTestPeriod=120
acquireRetryAttempts=10
acquireRetryDelay=100
autoCommitOnClose=false
breakAfterAcquireFailure=false
testConnectionOnCheckout=true
testConnectionOnCheckin=true
preferredTestQuery =SELECT 1
debugUnreturnedConnectionStackTraces=true
unreturnedConnectionTimeout=30

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题