Druid連接池 一個(gè)設(shè)置 removeAbandonedTimeout : 數(shù)據(jù)庫(kù)

Druid連接池 一個(gè)設(shè)置 removeAbandonedTimeout : 數(shù)據(jù)庫(kù)??

<!-- 超過(guò)時(shí)間限制是否回收 --> ?

<property name="removeAbandoned" value="true" /> ?

<!-- 超時(shí)時(shí)間;單位為秒。180秒=3分鐘 --> ?

<property name="removeAbandonedTimeout" value="180" /> ?

<!-- 關(guān)閉abanded連接時(shí)輸出錯(cuò)誤日志 --> ?

<property name="logAbandoned" value="true" /> ?

?使用druid連接池的超時(shí)回收機(jī)制排查連接泄露問(wèn)題

說(shuō)什么holder為空

? ? 第一眼看到holder就像到Spring的源碼, 里面到處是holder(笑)

? ? 但是這里的holder不是Spirng里面的,是Druid的

? ? 這個(gè)holder大概是用來(lái)hou住連接池里面的連接的.

? ? 然后為什么為空了呢? 目測(cè)是哪個(gè)鏈接壞了, 或者被意外的關(guān)閉了...

? ? 根據(jù)異常調(diào)源碼 ?at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:942)


看不出啥來(lái). 只能將日志繼續(xù)看看, 還是看不出啥來(lái)

? ? 然后看了上面代碼幾遍后, 老覺(jué)得?isRemoveAbandoned() 這個(gè)方法有鬼.

? ? 查看調(diào)用處,



這里不對(duì)頭, ??timeMillis >= removeAbandonedTimeoutMillis ?timeMillis 這個(gè)是getConnection()被調(diào)用時(shí)的時(shí)間

? ? 意思就是一個(gè)連接被get后, 超過(guò)了?removeAbandonedTimeoutMillis這么久我就弄死你.

? ? 然后繼續(xù)找removeAbandonedTimeoutMillis 這玩意在哪里設(shè)置的 ? ,最后發(fā)現(xiàn)是在


<property name="removeAbandoned" value="true" />

<property name="removeAbandonedTimeout" value="1800" />

? ? 初始化配置的這里設(shè)置的, ?這兩個(gè)參數(shù)的大概意思就是,?

? ? 通過(guò)datasource.getConnontion() 取得的連接必須在removeAbandonedTimeout這么多秒內(nèi)調(diào)用close(),要不我就強(qiáng)制關(guān)閉.(就是conn不能超過(guò)指定的租期)

? ? 然后調(diào)成2個(gè)小時(shí)~~~

? ? 然后程序成功跑完~~~華麗麗的等了50分鐘

? ? 總結(jié):

? ? 連接池為了防止程序從池里取得連接后忘記歸還的情況, 而提供了一些參數(shù)來(lái)設(shè)置一個(gè)租期, 使用這個(gè)可以在一定程度上防止連接泄漏

? ? 但是如果你的業(yè)務(wù)真要跑這么久~~~~那還是注意下這個(gè)設(shè)置.

轉(zhuǎn)載于:https://my.oschina.net/xiaominmin/blog/1597116

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容