一個(gè)網(wǎng)站每天大概有20萬的訪問量,使用的tomcat自帶dbcp連接池,一般網(wǎng)站訪問很好,速度也很快,但是過一段時(shí)間后,總是報(bào)timeout waiting for idle object的異常信息,最后查了apache tomcat的官方文檔,終于找到解決方法:
成都創(chuàng)新互聯(lián)是專業(yè)的安澤網(wǎng)站建設(shè)公司,安澤接單;提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行安澤網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!數(shù)據(jù)庫連接池創(chuàng)建和管理池中的數(shù)據(jù)庫連接對象。重建和復(fù)用已存在的連接對象要比創(chuàng)建新的連接要頻繁的多。
連接池會存在這樣一個(gè)問題。web應(yīng)用已經(jīng)明確關(guān)閉ResultSet,Statement,及Connection對象;當(dāng)關(guān)閉出現(xiàn)故障的web應(yīng)用所使用的資源
時(shí)將會導(dǎo)致這個(gè)連接資源不能在復(fù)用,這就是數(shù)據(jù)庫連接池泄露,最終導(dǎo)致在你的應(yīng)用程序中沒有連接對象可以使用。
這當(dāng)然是有解決方法的,Apache Commons DBCP可以配置為跟蹤和恢復(fù)這些被棄的數(shù)據(jù)庫連接對象。不僅恢復(fù)還可以跟蹤那些連接數(shù)據(jù)庫卻沒有關(guān)閉的代碼片段。
要增加連接池中被棄的連接重新可用,打開配置文件,為Resource標(biāo)簽配置以下參數(shù):
removeAbandonedOnBorrow=true
removeAbandonedOnMaintenance=true
removeAbandonedTimeout="60"
logAbandoned="true"
默認(rèn)情況下removeAbandonedOnBorrow和removeAbandonedOnMaintenance都是為false。
注意:removeAbandonedOnMaintenance只有在timeBetweenEvictionRunsMillis設(shè)置為正數(shù)的情況下才有效。
removeAbandonedTimeout屬性是設(shè)置數(shù)據(jù)庫連接被釋最多空閑時(shí)間多少秒之后設(shè)置為空閑。默認(rèn)移除廢棄連接的時(shí)間為300秒。
提示:
如果啟用removeAbandonedOnMaintenance 或 removeAbandonedOnBorrow,那些被認(rèn)為廢棄的連接對象有可能被池回收。這個(gè)機(jī)制以下情況下會觸發(fā):
當(dāng)getNumIdle() < 2并且getNumActive() > getMaxTotal() - 3及emoveAbandonedOnBorrow 設(shè)置為true時(shí);或 當(dāng)removeAbandonedOnMaintenance設(shè)置為true并且回收完成時(shí)。
打個(gè)比方說:
如果設(shè)置maxTotal=20,當(dāng)有18個(gè)活躍連接、1個(gè)空閑連接時(shí)會觸發(fā)removeAbandonedOnBorrow,不過僅是那些使用時(shí)間超過removeAbandonedTimeout秒數(shù)的活動連接才會被移除(默認(rèn)是300秒)
,遍歷resultset不作為正在使用。創(chuàng)建Statement,PrepareStatement或CallableStatement或使用其中一個(gè)執(zhí)行查詢(執(zhí)行exceute方法)重置父連接的lastUsed屬性。
-----------------------------
一、Apache官方DBCP文檔給出的配置示例:
可參見:/tupian/20230522/jndi-datasource-examples-howto.html
maxActive="100" maxIdle="30" maxWait="10000" username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/javatest"/> tomcat JDBC連接池配置示例,自動檢查連接的可用性,dbcp定時(shí)檢測連接,dbcp自動重連的配置
網(wǎng)站名稱:tomcat自帶連接池dbcp配置以及優(yōu)化說明-創(chuàng)新互聯(lián)
URL鏈接:http://weahome.cn/article/doosjj.html