1. 程式人生 > >使用c3p0資料庫連線池時出現com.mchange.v2.resourcepool.TimeoutException

使用c3p0資料庫連線池時出現com.mchange.v2.resourcepool.TimeoutException

有一個線上環境使用的是c3p0資料庫,為外部提供介面服務。最近訪問壓力增大後臺tomcat的日誌裡面頻繁出現

com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from [email protected] -- timeout at awaitAvailable()

的異常資訊

在網上搜索了半天找到兩種最多的方法:

1.修改checkoutTimeout的值,這個值我現在已經設定是5000了也就是5秒超時,如果再大就沒意義了,一個介面5秒還沒響應是非常不正常的。

2.增加acquireIncrement的值,這個值感覺也不靠譜,只是增大了每次獲取的數量,如果根本就獲取不到連線就無意義。

無奈只好優化程式,加大連線池的maxPoolSize和minPoolSize的值。

但是就算把 maxPoolSize 的值設定的比tomcat的最大執行緒的值大,過不了一會還是出現那個問題。我就奇怪了就算每個請求永久佔用一個連線也夠用了,怎麼還會出現獲取連線超時的問題。

然後繼續在晚上搜資料庫連線池發現了bonecp。

換上這個後果然問題解決,日誌裡面再沒出現獲取連線超時的問題。

看來c3p0在大併發的情況下還真的是不容樂觀啊。

順便說下專案的併發情況,單臺tomcat 最大maxThreads的值設為400,每次啟動後tomcat的日誌中都會出現執行緒超過最大執行緒的資訊。 也就是峰值併發數 > 400 。

	<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
	   <property name="driverClass" value="com.mysql.jdbc.Driver" />
	   <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/data?useUnicode=true&characterEncoding=utf8" />
	   <property name="username" value="root"/>
	   <property name="password" value="123456"/>
	   <property name="idleConnectionTestPeriodInMinutes" value="240"/>
	   <property name="idleMaxAgeInMinutes" value="60"/>
	   <property name="maxConnectionsPerPartition" value="250"/>
	   <property name="minConnectionsPerPartition" value="40"/>
	   <property name="partitionCount" value="2"/>
	   <property name="acquireIncrement" value="10"/>
	   <property name="statementsCacheSize" value="0"/>
	   <property name="releaseHelperThreads" value="5"/>
	   <property name="connectionTimeoutInMs" value="5000"/>
	</bean>	 

以上是我的配置檔案,初始值設定為2x40=80    也就是第一次會建立80個連線。 所以專案啟動後第一次請求會比較慢,大概5-10秒才會有響應。 

相關推薦

使用c3p0資料庫連線出現com.mchange.v2.resourcepool.TimeoutException

有一個線上環境使用的是c3p0資料庫,為外部提供介面服務。最近訪問壓力增大後臺tomcat的日誌裡面頻繁出現 com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting t

jsp,servlet 連線c3p0資料庫連線出現的問題

九月 02, 2015 10:17:48 下午 com.mchange.v2.log.MLog <clinit> INFO: MLog clients using java 1.4+ standard logging. 九月 02, 2015 10:17:48

com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource

異常資訊: com.mchange.v2.resourcepool.TimeoutException: A client timed out while waiting to acquire a resource from [email protected] -- timeout

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

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

C3P0資料庫連線因網路阻塞出現的問題

我手上有一個簡訊傳送的系統,每天傳送量大約3萬的樣子,有天突然崩潰,看到資料庫連線池一直在報錯,很慌亂的重啟了系統,沒用效果. 之前選擇資料庫連線池時,看hibernate推薦c3p0,就下載了最新的版本,之前一直工作穩定.去到google下,發現好多問這個問題,原來是他新版

ThreadLocal解決事務執行緒安全問題(c3p0資料庫連線工具類)

ThreadLocal底層是Map集合,它的key是當前執行緒,value由自己設定,可以繫結Connection或其他物件等,保證本次同一執行緒使用同一Connection。 ThreadLocal類提供幾個方法: get/set/remove 以下是ThreadLocal搭配c3p

spring jdbc --注:c3p0資料庫連線或druid連線使用配置整理

是Maven配置檔案:pom.xml的程式碼內容: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:sch

Mysql學習--07.c3p0資料庫連線

學習目標 C3p0資料庫連線池 一、c3p0資料庫連線池          1、概述: c3p0是一個開源的JDBC連線池、它實現了資料來源和JNDI(Java Naming and Directory Interface,Java命名和目錄介面)繫結、支援jdbc3

c3p0 資料庫連線配置 詳細總結

前言 關於 c3p0 一般有這麼兩種配置,一種是通過 set 方法進行配置,另一種是通過在同 src 目錄下的 c3p0-conflg.xml 檔案或者 c3p0.properties 檔案進行相關的配置。 一、c3p0 通過 set 方法進行配置 原始碼: priva

maven專案管理器,Junit測試單元以及C3P0資料庫連線的會用總結

最近剛好連續學習了maven專案管理器,Junit測試單元以及C3P0資料庫連線池的使用,現將學習工程中遇到的問題與注意點總結如下: 1.maven專案管理器 maven是一種很好用的專案管理器,在開發工具中建立一個maven專案,它會自動生成各種目錄,有專門存放java

c3p0資料庫連線死鎖解決

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

c3p0資料庫連線如何正確的關閉資源(“too many connections”的解決辦法)

一.問題分析 關於c3p0資料庫連線池的資源的關閉是一個很重要的問題,但是資源的關閉不僅僅是隻呼叫close()方法,將連結放入池中那麼簡單,如果你不考慮資料來源DataSource的關閉,那麼你的Demo將在很少的資料庫互動之後報出“too many connection

javaWeb學習記錄:c3p0資料庫連線;DBUtils工具

1. c3p0資料庫連線池 讓我想起了星球大戰裡的C-3PO,哈哈。 1.1 資料庫連線池的概念 用池來管理Connection,這可以重複使用Connection。有了池,所以我們就不用自己來建立Connection,而是通過池來獲取Connecti

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

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

spring+mybatis+c3p0資料庫連線或druid連線使用配置整理

系統性能優化的時候,或者說在進行程式碼開發的時候,多數人應該都知道一個很基本的原則,那就是保證功能正常良好的情況下,要儘量減少對資料庫的操作。  據我所知,原因大概有這樣兩個:  一個是,一般情況下系統伺服器和資料庫伺服器應該是不在同一硬體上,這時候對資料庫的連線

JDBC整合c3p0資料庫連線 解決Too many connections錯誤

前段時間,接手一個專案使用的是原始的jdbc作為資料庫的訪問,釋出到伺服器上在運行了一段時間之後總是會出現無法訪問的情況,登入到伺服器,檢視tomcat日誌發現總是報如下的錯誤。 Caused by: com.mysql.jdbc.exceptions.jdbc4.

Hibernate第十一篇【配置C3P0資料庫連線、執行緒Session】

Hibernate連線池 Hibernate自帶了連線池,但是呢,該連線池比較簡單..而Hibernate又對C3P0這個連線池支援…因此我們來更換Hibernate連線池為C3P0 檢視Hibernate自帶的連線池 我們可以通過Hibernate.

c3p0資料庫連線資料來源配置

 不管通過何種持久化技術,都必須通過資料連線訪問資料庫,在Spring中,資料連線是通過資料來源獲得的。在以往的應用中,資料來源一般是 Web應用伺服器提供的。在Spring中,你不但可以通過JNDI獲取應用伺服器的資料來源,也可以直接在Spring容器中配置資料來源,此外,你還可以 通過程式碼的方式建立一

tomcat配置c3p0資料庫連線遇到問題與解決

這短時間在做一個Android專案,由於牽扯到資料庫,也就有伺服器。app預期是想做大,所以一方面考慮到效能相關 因此就想把tomcat和比較知名的c3p0結合起來,從這一方面來提高效能。 首先第一步:把c3p0解壓資料夾的3個jar包全部考到tomcat根目錄下lib資料

JavaEE基礎(06):Servlet整合C3P0資料庫連線

本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、C3P0連線池 1、C3P0簡介 C3P0是一個開源的JDBC連線池,應用程式根據C3P0配置來初始化資料庫連線,可以自動回收空閒連線的功能。 2、核心依賴 <dependency> <groupId>mysq