tomcat連接池泄露的監控和解決
1. 問(wèn)題描述
Web程序在tomcat剛開(kāi)始運行時(shí)速度很快,但過(guò)一段時(shí)間后發(fā)現速度變得很慢。
檢查日志輸出,發(fā)現異常如下:
org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause:
java.util.NoSuchElementException: Timeout waiting for idle object
同時(shí)在SQLServer事件探查器中發(fā)現,每執行一次sql語(yǔ)句都要產(chǎn)生Audit login事件,語(yǔ)句執行后產(chǎn)生
Audit logout事件。說(shuō)明每一次tomcat都是重新打開(kāi)新的連接。
2. 問(wèn)題解決
tomcat 的數據源定義提供了三個(gè)參數:
a. 如果設為true則tomcat自動(dòng)檢查恢復重新利用,沒(méi)有正常關(guān)閉的Connection.(默認是false)
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
b. 設定連接在多少秒內被認為是放棄的連接,即可進(jìn)行恢復利用。
<parameter>
<name>removeAbandonedTimeout</name>
<value>60</value>
</parameter>
c. 輸出回收的日志,可以詳細打印出異常從而發(fā)現是在那里發(fā)生了泄漏
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
聯(lián)系客服