1. 程式人生 > >為何要設定資料庫連線池的 超時等待時間

為何要設定資料庫連線池的 超時等待時間

先說問題背景:程式有多執行緒呼叫,有大量的資料庫互動

遇到的問題:程式執行一段時間之後hung 住了,沒有異常丟擲,也不繼續執行

因為有多執行緒呼叫,因此無法快速準確的定位問題:是執行緒問題還是其他程式碼邏輯問題

後來發現是資料庫連線的問題:由於有段程式碼資料庫連線沒有釋放,導致資料庫連線池的連線被佔滿,後續的申請持續等待

定位問題過程:

(1) 加上了資料庫連線池超時等待時間的設定 -- 如果超時,則丟擲異常,可以定位是資料庫連線池的問題

(2) 在log 中列印當前active 的連線數 (BasicDataSource 中的getNumActive() 方法)-- 可以得出不是連線池連線數的不夠,而是由於active 的 connection 持續在增加,得到程式碼中有未釋放連線的結論

(3) 查詢程式碼,釋放連線

這個問題查找了小一天。如果開始就把最大等待時間加上,那麼可能很快就可以定位到問題所在。

以下是basicDatasource 的引數 以及解釋,留作參考

dbcp.BasicDataSource

1、<-- 初始化連線 -->

initialSize=10 2、 #

2 <-- 最大空閒連線 -->

 maxIdle=20 3、 #

3 <-- 最小空閒連線 -->

minIdle=5

4、#最大連線數量 maxActive=50

5、#是否在自動回收超時連線的時候列印連線的超時錯誤 logAbandoned=true

6、#是否自動回收超時連線 removeAbandoned=true

7、#超時時間(以秒數為單位) removeAbandonedTimeout=180

8、 #<-- 超時等待時間以毫秒為單位 6000毫秒/1000等於60秒 -->

maxWait=1000

相關推薦

為何設定資料庫連線超時等待時間

先說問題背景:程式有多執行緒呼叫,有大量的資料庫互動 遇到的問題:程式執行一段時間之後hung 住了,沒有異常丟擲,也不繼續執行 因為有多執行緒呼叫,因此無法快速準確的定位問題:是執行緒問題還是其他程式碼邏輯問題 後來發現是資料庫連線的問題:由於有段程式碼資料庫連線

為什麼使用資料庫連線

資料庫連線池技術帶來的優勢: 1. 資源重用 由於資料庫連線得到重用,避免了頻繁建立、釋放連線引起的大量效能開銷。在減少系統消耗的基礎上,另一方面也增進了系統執行環境的平穩性(減少記憶體碎片以及資料庫臨時程序/執行緒的數量)。 2. 更快的系統響應速度 資料庫連線池在初始化過程中,往往已經建立了若干資料庫連線

如何正確設定資料庫連線的大小?我的天,原來之前都設定錯了!

文章翻譯整理自: https://github.com/brettwooldridge/HikariCP/wiki/About-Pool-Sizing 歡迎關注個人微信公眾號: 小哈學Java, 文末分享阿里 P8 資深架構師吐血總結的 《Java 核心知識整理&面試.pdf》資源連結!! 個人網站

你真的知道如何設定資料庫連線的大小嗎

前段時間在一個老專案中經歷過一個問題:一個 Dubbo 服務,啟動的時候慢的要死,後來看日誌查原因整個過程一直在初始化資料庫連線。一看資料庫連線引數,連線池大小:1024。 很多入行晚的同學沒有經歷過手寫 JDBC 連線的日子。那個時候沒有資料庫連線池的概念,都是原生程式碼一頓搞,後來有了 iBATIS 之後

selenium設定元素髮現超時等待時間-python

前言:之前寫了個指令碼,要在ip站點網站查詢一千多個域名的備案資訊,但是有些域名是沒有備案的,所以就找不到元素,雖然我已經設定了異常判斷,但是預設等待的30秒時間讓我無法忍受。然後經過各種百度找到了解

java執行緒(超時等待+簡單資料庫連線

超時等待模式在一般的等待/通知機制上新增超時控制,使得方法執行時間過長也不會一直造成阻塞,而是在一段時間後返回。 通常java連線資料庫時會將其執行過程交由一個執行緒進行處理,使得在一些I/O操作或需要一定時間執行的行為在後臺執行而客戶端能立刻對當前的動作做出下一個反應。

JavaWeb問題集錦: 資料庫連線請求超時 HikariPool-1 - Connection is not available, request timed out after 30000ms

報錯日誌:     java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30

資料庫連線----下次web我用!!!!!!!!

一、應用程式直接獲取資料庫連線的缺點   使用者每次請求都需要向資料庫獲得連結,而資料庫建立連線通常需要消耗相對較大的資源,建立時間也較長。假設網站一天10萬訪問量,資料庫伺服器就需要建立10萬次連線,極大的浪費資料庫的資源,並且極易造成資料庫伺服器記憶體溢位、拓機。如下圖

資料庫連線的原理。為什麼使用連線

1,資料庫連線是一件費時的操作,連線池可以使多個操作共享一個連線。 2,資料庫連線池的基本思想就是為資料庫連線建立一個“緩衝池”。預先在緩衝池中放入一定數量的連線,當需要建立資料庫連線時,只需從“緩衝

[總結]資料庫連線設定不當導致大量的本地連接出現time_wait狀態。

最近在做效能測試時,在使用netstat命令檢視本地網路連線狀態時發現有大量的連線處於time_wait狀態。 於是認為是我們的dbcp的配置檔案寫的有問題,開始查應如何配置dbcp。但是改了幾個引數後,發現還是出現大量的time_wait。 於是又開始檢視

資料庫連線介紹、主要引數設定、作用

<bean id="dataSource"               class="org.apache.commons.dbcp.BasicDataSource">               <property name="driverClassName"              

資料庫連線應用中資料庫伺服器斷開超時連線的問題

資料庫應用開發過程中,我們可能會遇到一個問題:應用使用了資料庫連線池,每經過指定時間後,發出到資料庫伺服器的任何請求都會失敗,而且有且僅有一次失敗,之後的正常訪問都沒有問題。尤其是在Web應用中,如果晚上時段沒有訪問,而第二天第一個訪客的經歷就是碰到一個數據庫訪問錯誤,

設定JDBC資料庫連線

前言     JDBC作為J2EE的規範之一,它定義了連線資料庫的介面,封裝了連線資料庫的細節問題,給開發人員極大的方便。開發人員只需要實現這些介面,就可以連線不同的資料庫,不需要針對不同資料庫寫不

資料庫連線到底應該設定多大?

開發十年,就只剩下這套架構體系了! >>>   

Java資料庫連線細節探討

我們知道,資料庫連線池可以把資料庫的連線快取起來,下次使用的話可以直接取到快取起來的資料庫連線。那麼,在這個過程中有幾個細節需要注意: 1、資料庫的連線數有沒有限制? 2、資料庫會不會自動斷開已經建立的連線? 3、如果資料庫重啟了,但應用沒有重啟,那麼資料庫連線池中的所有連線都不可用了,

JavaWeb_day10_資料庫連線_c3p0_DBUtils

1.在實際開發中,“獲取連線”和“釋放資源”是很消耗系統資源的兩個過程,為了解決此問題,採用連線池技術,共享連線connection 2.連線池概念 3.Java的資料庫連線池的公共介面:javax.sql.DataSource 常見的連線池:DBCP   C3

手寫資料庫連線附gp連線jar包地址

  手寫資料庫連線並,測試.   最近資料庫要連線GP資料庫(GreenplumSQL),在建立連線的時候需要做建立不同的連線數量. 其實當想到寫資料庫連線時,完全可以通過springdata jpa直接寫介面,這是一種思路. 所以在使用的使用,就寫了個dem

JDBC資料庫連線連線資料庫資料庫操作DAO層設計通用更新及查詢方法(二)

上篇文章主要介紹了通過資料庫連線池連線資料庫,然後設計了對資料庫通用更新和查詢方法,本篇文章主要通過例項介紹上篇文章定義的對資料庫操作的幾個方法的使用:     首先我們先在資料庫建立一個學生資訊表Student欄位如圖: 建立好表將配置檔案的資訊改好然後需要建立一

JDBC資料庫連線連線資料庫資料庫操作DAO層設計通用更新及查詢方法(一)

該篇文章介紹了資料庫連線池獲取資料庫連線以及資料庫操作的基本使用,然後主要提供了java專案案例中dao層的一種設計,利用反射的原理定義了通用的查詢方法可以對應所有的表和例項。文章中的每段程式碼都提供了詳細的註釋及邏輯步驟 首先匯入資料庫連線的所需要的jar包:    

springboot配置預設資料庫連線並解決初始連線未生效問題

目前Spring Boot中預設支援的連線池有dbcp,dbcp2, tomcat, hikari三種連線池。  在springboot1.5之前預設tomcat連線池, 版本org.springframework.boot.autoconfigure.jdbc.Data