1. 程式人生 > >記一次:c3p0連線池死鎖的問題

記一次:c3p0連線池死鎖的問題

       在公司的專案開發中,我負責資料層介面的程式碼編寫工作,其中,就涉及到mysql資料庫的查詢介面。為提供效能,也使用了C3P0這個連線池技術。配置簡單,也好用。這裡說一下,我們的使用環境;由於是給中介軟體層使用,而中介軟體並沒有向web層那樣,有配置spring和hibernate,因此,這些查詢介面只是使用了c3p0來管理資料庫連線。

       和很多網友一樣,碰到了死鎖的這個問題,資訊類似如下:

       WARNING: com[email protected]4b9cafa7 -- APPARENT DEADLOCK!!! Complete Status:
          Managed Threads: 3
          Active Threads: 3

        通過中介軟體的日誌發現:中介軟體多個應用在同時啟動時,肯定報這個警告;有兩臺伺服器在凌晨4點左右,幾乎同時報這個警告。奇怪的是,貌似業務沒有受到影響。之後,在網上查找了很多資料和部落格,貌似沒用。這裡想說的是,解決問題還是要從自身的應用環境出發;在進行測試時,儘量模擬真實的環境,不要只是能用就行。

        既然,中介軟體多個應用在同時啟動時,肯定報這個警告,那就模擬一下。在eclipse中,同時啟動三個同一個測試用例(三個不同的程序);果然,三個測試用例都報了這個警告。為什麼呢?因為中介軟體使用的是,我提供的介面,自然C3P0的配置檔案也是一樣的;如果說,這裡邊有什麼衝突的話,那就是這些資料來源的名稱是相同了

。修改後,在資料來源的名稱後面加上一些隨機字元,再次進行測試,啟動就沒有報這個錯誤了。再在中介軟體的伺服器上進行測試,啟動沒有報這個警告了。

        一些網友,也提到C3P0在配置多資料來源時,容易出現死鎖的問題,下面給出一個部落格連結:http://www.2cto.com/database/201411/349966.html

       另外,在配置連線池單例時,在多執行緒獲取連線時,也容易出現獲取連線超時的問題,你可以需要按照下面這樣修改程式碼:

	public <span style="color:#ff0000;">synchronized</span> final Connection getConnection() {
        	try {
            		return ds.getConnection();
        	} catch (SQLException e) {
            		e.printStackTrace();
        	}
        	return null;
    	}



相關推薦

c3p0連線的問題

       在公司的專案開發中,我負責資料層介面的程式碼編寫工作,其中,就涉及到mysql資料庫的查詢介面。為提供效能,也使用了C3P0這個連線池技術。配置簡單,也好用。這裡說一下,我們的使用環境;由於是給中介軟體層使用,而中介軟體並沒有向web層那樣,有配置spring

線上應用連線滿的處理

記一次線上應用dubbo-claim連線池滿的處理 首先看到dubbo-claim應用突然大面積報錯,基本反饋是凍結預算出問題了,看了看凍結預算的程式碼,發現寫的非常複雜,果斷放棄看程式碼來排查問題。 Could not open jdbc connec

c3p0資料庫連線解決

專案進行壓力測試的時候,執行大概1小時候,後臺丟擲以下異常: Java程式碼   Nov 9, 2012 1:41:59 AM com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector 

c3p0資料庫連線問題和mysql重連,連線丟失

c3p0引數解釋 #最常用配置#initialPoolSize:連線池初始化時建立的連線數,default : 3,取值應在minPoolSize與maxPoolSize之間 c3p0.initialPoolSize=10#minPoolSize:連線池保持的最小連線數,d

用Hibernate儲存物件出現c3p0資料庫連線問題的可能原因

我在執行以下程式碼時遇到了問題: Session session = getSession(); Transaction tx = session.beginTransaction(); try {

redis主從連線的錯誤

Redis版本 redis-4.0.11 安裝後多例項均可正常使用,將其中一個例項設定為從伺服器後,呼叫info replication報master_link_status:down; 外部原因: 1.因為redis部署在阿里雲伺服器上,首先在阿里雲控制

paramiko遠端連線遇到的坑

背景:工作中遇到了一個問題,需要用到windows向windows連線(檔案傳發)以及,linux向windows連線(檔案傳發)的需求。 自然而然會考慮到用paramiko,然而paramiko我用的比較多的還是連線linux的操作,至於連線windows的操作沒用過。在網上搜索一段時間後,發現網上的教程基

CP30資料連線

在公司的專案開發中,我負責資料層介面的程式碼編寫工作,其中,就涉及到mysql資料庫的查詢介面。為提供效能,也使用了C3P0這個連線池技術。配置簡單,也好用。這裡說一下,我們的使用環境;由於是給中介軟體層使用,而中介軟體並沒有向web層那樣,有配置spring和hibern

踩坑使用Navicat連線Mysql8.0.11

  MySQL8.0正式版8.0.11已釋出,官方表示MySQL8要比MySQL5.7塊兩倍,同事還帶來了大量的改進和更快的效能!   從MySQL5.7升級到MySQL8.0僅支援通過使用in-place方式進行升級,並且不支援從MySQL8.0降級到MySQ

c3p0連線連線異常錯誤的排查

最近寫了一個數據庫採集程式,大概過程是將SQLSERVER資料庫的資料定時採集到Oracle資料庫。1小時出一次資料,每次資料量在2W左右。環境採用Sping3+hibernate4,資料庫連線池採用C3p0 奇怪的時候每隔一段時間都會報:“c3p0 connection

線上故障資料庫連線洩露後的思考

 一:初步排查 早上作為能效平臺系統的使用高峰期,系統負載通常比其它時間段更大一些,某個時間段會有大量使用者登入。當天系統開始有使用者報障,釋出系統線上無法構建釋出,然後後續有使用者不能登入系統,系統發生假死,當然系統不是真的宕機,而是所有和資料庫有關的連線都被阻塞,隨後檢視日誌發現有大量報錯。 和

用gdb調試python多線程代碼-的發現

ubunt reg out 什麽 err local class tdi str | 版權:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。如有問題,可以郵件:[email protected] 前言

2018第一發【Advanced Installer】打包之旅

4.0 config文件 cli 簡單 官網 class 用法 process file 一、前言 2017年最後幾天,你們都高高興興的跨年,博主還在加班制作.net安裝包。因為年前要出來第一版的安裝包,所以博主是加班加點啊。本來想用VS自帶的制作工具,不過用過的人都知道

之旅

target 發現 臺電腦 。。 col under oss 任務 技術分享   emmm。。。昨天boss給了一個任務,讓我用python在linux下寫一個獲取當前CPU使用、磁盤讀寫、內存使用等情況的腳本,滿心歡喜的答應了,嗯嗯,開始搗鼓起來。   由於我沒用過Li

Yii2尷尬的bug

警告 use 一次 .com eight TP ger 怎麽 ted 創建一個文章模塊,寫完添加動作之後,分配到視圖,發現報錯: Exception (Not Supported) ‘yii\base\NotSupportedException‘ with messag

產品需求圖片等比縮放和CSS自適應布局16:9

是我 width 圖片展示 網上 IT tom 就會 很好 尺寸 前言   前陣子,產品跑過來問我現有的模板中沒有圖片模板,需要添加一個圖片模板;然而,他要求圖片在展示區最好能夠實現隨著窗口的變化而自動按圖片比例等比縮放,並且居中展示圖片。我當時想著,拋開技術實現層面,圖

線上MySQL數據庫問題

重復 成功 中一 主鍵 adl 一次 his TE BE 最近線上項目報了一個MySQL死鎖(DealLock)錯誤,雖說對業務上是沒有什麽影響的,由於自己對數據庫鎖這塊了解不是很多,之前也沒怎麽的在線上碰到過。這次剛好遇到了,便在此記錄一下。 出現

[Windows10]修復註冊表相關血案該文件沒有與之關聯的應用來執行該操作。請安裝應用,若已經安裝應用,請在“默認應用設置”頁面中創建關聯。

src 相關 overflow 還在 一次 註冊表 forum sin 嘗試 今天閑得蛋疼清理了一下右鍵菜單,於是在之後某時刻使用Everything的“雙擊路徑列打開目錄”功能時發現異常: [Window Title] Everything

jdbc連線oracle資料庫佔用CPU過高的問題排查

    背景:     公司有一個通訊系統,主要是通訊資料到客戶端程式所指定的資料庫,目前支援sqlserver、mysql和oracle三種類型的資料庫,此篇主要記錄一次oracle資料庫佔用CPU飆高的問題。   &nbs

OpenStack報錯No tenant network is available for allocation

建立selfservice網路時報錯: [root@controller ~]# openstack network create selfservice Error while executing command: HttpException: Unknown error, {"Neu