在我的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
暂无答案!
目前还没有任何答案,快来回答吧!