連線池問題

2021-09-01 09:07:24 字數 887 閱讀 4533

connection耗盡不一定就是由connection leak引起,如果你的執行佇列中線程數設定的比connection pool大,而且你的某些程式占用connection時間過長,致使執行佇列中的執行緒已經把connection pool中的所有的connection都申請出來了,此時如果再有新的執行執行緒響應請求申請connection,pool中已經告罄,connection就無從得到了,只有等待。這從控制台的connection監控中是看得出的。這種情況下,如果程式能正確關閉connection,connection還是會被釋放的,不會洩露。

還有一種情況是已獲得connection的執行緒間發生了死鎖,沒法去釋放connection,使得connection被一直占用。這要去重點檢查一下應用中的synchronize**段和涉及資料庫鎖的**。同時可以定時,尤其是系統掛了後作一下thread dump,重點看看執行中和等待資源的執行緒在忙什麼和等什麼。

如果要查connection leak,還是得從應用入手,仔細檢查connection的分配與釋放。確保connection的釋放**放在finally段中。還有就是重點檢查connection有沒有被一些static物件引用。洩露往往就發生在這裡。jvm的gc對付一般的connection leak還是很有效的,比如說未關閉的connection只是函式中的區域性變數且並未被其它物件引用。但gc對被static物件引用的connection是有心無力。

用profiling工具可以輔助偵測connection leak,具體做法是在cpu的**執行檢視的**執行樹里,檢查get connection與close connection的執行次數是否相同?如果get connection執行次數大於close connection,這就要重點檢查一下了。這一類的工具有很多,常見的有:jprofiler,jprobe,optimizeit

連線池的問題

看到關於連線池的問題,覺得很有用,摘錄到自己部落格上 net連線池救生員 防止可淹沒應用程式的池溢位 william vaughn 大多數 ado.net 資料提供程式使用連線池,以提高圍繞 microsoft 斷開連線的 net 結構構建的應用程式的效能。應用程式首先開啟乙個連線 或從連線池獲得乙...

mysql連線池 順序 Mysql 連線池

通常,如果我們的服務涉及到mysql的操作,當乙個新的請求進來的時候,可以先連線mysql,使用完之後再斷開連線即可。但這樣做有個弊端,當請求量巨大時,會在瞬間有大量的資料庫連線與斷開操作,這是非常影響 mysql 效能的做法。此時,我們就需要使用mysql連線池。在 python 服務中使用 my...

關於tomcat連線池問題

好久沒有親自寫 了,基本都是從自己多年來積累的一些源程式直接拷貝 修改。但近來幫朋友做個小辦公系統時,發現乙個奇怪的現象,特此寫出來,供自己日後備忘,同時,也給遇到相同問題的同行乙個參考。在tomcat5.0中,我部署的連線池是可以正常使用的,但到了6.0就報出錯誤 org.apache.tomca...