c3p0--常见异常
- 获取资源timeout:
 
 异常信息如下:Caused by: java.sql.SQLException: An attempt by a client to checkout a Connection has timed out. 
 [Cause: com.mchange.v2.resourcepool.TimeoutException:
 A client timed out while waiting to acquire a resource from com.mchange.v2.resourcepool.BasicResourcePool@4d5a39b7 -- timeout at awaitAvailable() 查找发现,获取connection资源timeout的地方,在basicResourcePool类的awaitAvailable方法里,代码很简单: private void awaitAvailable(long timeout) throws InterruptedException, TimeoutException, ResourcePoolException 
 {
 assert Thread.holdsLock( this ); if (force_kill_acquires)
 throw new ResourcePoolException("A ResourcePool cannot acquire a new resource -- the factory or source appears to be down."); Thread t = Thread.currentThread();
 try
 {
 acquireWaiters.add( t ); int avail;
 long start = ( timeout > 0 ? System.currentTimeMillis() : -1);
 if (Debug.DEBUG && Debug.TRACE == Debug.TRACE_MAX)
 {
 if ( logger.isLoggable( MLevel.FINE ) )
 logger.fine("awaitAvailable(): " +
 (exampleResource != null ?
 exampleResource :
 "[unknown]") );
 trace();
 }
 while ((avail = unused.size()) == 0)
 {
 // the if case below can only occur when 1) a user attempts a
 // checkout which would provoke an acquire; 2) this
 // increments the pending acquires, so we go to the
 // wait below without provoking postAcquireMore(); 3)
 // the resources are acquired; 4) external management
 // of the pool (via for instance unpoolResource()
 // depletes the newly acquired resources before we
 // regain this' monitor; 5) we fall into wait() with
 // no acquires being scheduled, and perhaps a managed.size()
 // of zero, leading to deadlock. This could only occur in
 // fairly pathological situations where the pool is being
 // externally forced to a very low (even zero) size, but
 // since I've seen it, I've fixed it.
 if (pending_acquires == 0 && managed.size() < max)
 _recheckResizePool(); this.wait(timeout);
 if (timeout > 0 && System.currentTimeMillis() - start > timeout)
 throw new TimeoutException("A client timed out while waiting to acquire a resource from " + this + " -- timeout at awaitAvailable()");
 if (force_kill_acquires)
 throw new CannotAcquireResourceException("A ResourcePool could not acquire a resource from its primary factory or source.");
 ensureNotBroken();
 }
 }
 finally
 {
 acquireWaiters.remove( t );
 if (acquireWaiters.size() == 0)
 this.notifyAll();
 }
 }抛出异常的是第44行,而抛出异常的先决条件就是timeout了。表象来看是这样,再继续跟进代码的时候发现,进入等待资源的先决条件是: 1、available==0(unused==0) 
 2、managed。size>=max(池数量已达到最大)
 3、获取到的资源异常:如果设置了checkedoutTest这一项时,进行test的时候失败,导致异常;所以更直接的原因是以下几种: 1、请求资源的队列太长,排队时间太长导致超时:线程数量应付不过来大量的请求数量,导致超时 
 2、testConnection的原因导致的异常:网络震荡
 3、数据库服务器端无更多的链接可用那么相应的解决方案: 1、请求资源过长的,加大maxsize,如果请求量过大的,尽量将min和max设置成一个值,因此不存在shrink和expand的操作,这也是一种性能消耗 
 2、testConnection设置在checkin即可,checkout时无需test,否则卡在网络震荡就不好了
 3、检查数据库端的最大链接数。
 4、将c3p0的debug日志打开,检查它的managed、unused、available的分别size
- deadlock
c3p0--常见异常的更多相关文章
- orcal 数据库 maven架构  ssh框架 的全xml环境模版 及常见异常解决
		创建maven项目后,毫不犹豫,超简单傻瓜式搞定dependencies(pom.xml 就是maven的依赖管理),这样你就有了所有你要的包 <project xmlns="http ... 
- salesforce 零基础学习(五十四)常见异常友好消息提示
		异常或者error code汇总:https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_calls_con ... 
- 【转】Hibernate 常见异常
		转载地址:http://smartan.iteye.com/blog/1542137 Hibernate 常见异常net.sf.hibernate.MappingException 当出 ... 
- Spring10种常见异常解决方法
		在程序员生涯当中,提到最多的应该就是SSH三大框架了.作为第一大框架的Spring框架,我们经常使用. 然而在使用过程中,遇到过很多的常见异常,我在这里总结一下,大家共勉. 一.找不到配置文件的异常 ... 
- Hibernate 常见异常
		Hibernate 常见异常net.sf.hibernate.MappingException 当出现net.sf.hibernate.MappingException: Error r ... 
- 开通博客第一天  (先发一些android(java)常见异常信息
		常见异常: java.lang.AbstractMethodError抽象方法错误.当应用试图调用抽象方法时抛出. java.lang.AssertionError断言错.用来指示一个断言失败的情况. ... 
- iOS常见异常Exec_Bad_Access问题解决办法
		iOS常见异常Exec_Bad_Access问题解决办法 在iOS开发中,经常遇到Exec_Bad_Access异常,导致程序奔溃问题,一般这个问题都是因为过早的release对象,然后又对该 ... 
- 大数据平台常见异常-zookeeper
		本文主要阐述大数据平台环境zookeeper常见异常和解决方案 1.Connection reset by peer异常 异常说明 我们现在项目有个任务OneMinuteDataSync是用spark ... 
- struts2.1.8+hibernate2.5.6+spring3.0(ssh2三大框架)常见异常原因和解决方案
		---------------------------------------------------------------------------------------------------- ... 
- spring集成Junit做单元测试及常见异常解决办法
		spring-test依赖包 <!--Spring-test --> <!-- https://mvnrepository.com/artifact/org.springframew ... 
随机推荐
- 利用PHP实现页面跳转同时POST传参,CURL不行
			function payto(){ echo "<form style='display:none;' id='form1' name='form1' method='post' ac ... 
- 自己写了一个图片的马赛克消失效果(jQuery)
			其中的一个效果: html代码: <h1>单击图片,产生效果</h1> <div class="box"></div> 插件代码: ... 
- JS中的this机制
			1.this是啥? 简言之,this是JavaScript语言中定义的众多关键字之一,它的特殊在于它自动定义于每一个函数域内,但是this倒地指引啥东西却让很多人张二摸不着头脑.这里我们留个小悬念,希 ... 
- urllib2 Handler处理器和自定义opener(六)
			Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构 ... 
- css字体中px和em的区别
			2015-05-28 昨天看到一个不错的纯css3表格样式,看到代码后注意到了作者用的都是em在控制大小.顿时想到了自己习惯使用的px长度单位,就查了关于两者的区别.综合前辈们的总结记录整理下来,以供 ... 
- [转]js清除所有cookies
			来源:http://blog.csdn.net/zzl1120/article/details/6592332 var cookies = document.cookie.split(";& ... 
- 使用TCPDF输出完美的中文PDF文档
			TCPDF是一个用于快速生成PDF文件的PHP5函数包.TCPDF基于FPDF进行扩展和改进.支持UTF-8,Unicode,HTML和XHTML.在基于PHP开发的Web应用中,使用它来输出PDF文 ... 
- 跟我学算法 - 读取excel文件(xlrd)
			import xlrd import numpy as np # fname 表示文件名 fname = '1白.xlsx'# 打开文件 bk = xlrd.open_workbook(fname)# ... 
- 30-python3 中 bytes 和 string 之间的互相转换
			转自:http://www.jb51.net/article/105064.htm password = b'123456' 等价于: pw = '123456' password = pw.enco ... 
- golang之递归
			翠花,上代码 package main import ( "fmt" "time" ) /* 递归原则,一个大问题分解成相似的小问题 定义好出口条件,否则死循环 ... 
