com.alibaba.druid檢測排查數據庫連接數不釋放定位代碼


1、可能標題說的很不明白,其實就是這樣一個情況,一個工程項目錯誤日志出現GetConnectionTimeoutException: wait millis 90000, active 22000的異常,如下:

2、最先想到的是提高數據庫本身的最大連接數,查看一下數據庫連接數是否過小,平衡一下工程的使用量級別和並發級別,其中查詢數據庫的小語句如下:

select value as processes_max from v$parameter where name ='processes';  --數據庫允許的最大連接數  結果4000

select count(*) as process_now from v$process; --當前進程連接數

select value as session_max from v$parameter where name ='sessions'; --數據庫最大session數

select count(*) as session_now from v$session;  --當前的session連接數
 
select count(*) as active_now from v$session where status='ACTIVE'; --並發連接數

3、但是當把數據庫最大連接數也調整到合理的數字了,並且druid的基本配置也是沒有什么毛病,這個可以網上搜索,有很多druid的常規配置文章參考。如果還有連接數不夠的異常出現,這就要考慮是否程序本身存在沒有回收的連接數、會話數等開支,日積月累在某個時刻,比如訪問量高峰達到了飽和。那么可以添加druid的配置來幫助你監測,哪里沒有回收。

      <!-- 超過時間限制是否回收 -->  
        <property name="removeAbandoned" value="true" />  
        <!-- 超時時間;單位為秒。180秒=3分鍾   -->
        <property name="removeAbandonedTimeout" value="180" />  
        <!-- 關閉abanded連接時輸出錯誤日志   -->
        <property name="logAbandoned" value="true" />

4、這回注意抓取和分析日志,如下

5、結果進入具體的java類排查代碼,發現存在session沒有回收的問題。解決掉。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM