最近一段时间,ya178网站一直出现响应慢,宕机的情况,刚开始我以为是服务器供应商的问题,没在意,问题一拖再拖。后来检查了服务器日志,才发现网站程序可能有问题,立马排查,将一个用的少的功能关闭了,继续观察了一天,但是现象依然存在。此时我才意识到问题的严重性,再次找到今天最新的日志查看!
仔细观察之后我发现了这样的几句话:
com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector run
WARNING: com.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@341d3281 -- APPARENT DEADLOCK!!!
死锁!!!
对此我非常疑惑,仍然不确定!但是在此前的一段时间里,我重新对数据库进行配置,修改部分程序代码,重启过多次服务,都没有找到问题原因,不得不怀着试一试的态度,将这段信息拷到了搜索栏了,敲击回车!
从搜索引擎里筛选出来的结果中确实有许多与此问题相关的帖子,我按照顺序进行了点击。令我失望的是,关于c3p0死锁的问题大多没有明确的解决方法,很多楼主的问题都在上面挂着,没有得到解决。在一番搜索之后,我找到了一个帖子令我感到希望,帖子中,楼主对此问题进行了简单的分析,判断这个不是c3p0的bug,而问题的原因出现在c3p0的配置上,下面列举一下该楼主提到的配置内容:《c3p0数据库连接池死锁问题》
<!--连接池中保留的最小连接数。-->
<property name="minPoolSize" value="5"/>
<!--连接池中保留的最大连接数。Default: 15 -->
<property name="maxPoolSize" value="500"/>
<!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
<property name="initialPoolSize" value="10"/>
<!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
<property name="maxIdleTime" value="60"/>
<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement" value="5"/>
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements" value="0"/>
<!--每60秒检查所有连接池中的空闲连接。Default: 0 -->
<property name="idleConnectionTestPeriod" value="60"/>
<!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->
<property name="acquireRetryAttempts" value="30"/>
<!--获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常。但是数据源仍有效
保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试
获取连接失败后该数据源将申明已断开并永久关闭。Default: false-->
<property name="breakAfterAcquireFailure" value="false"/>
<!--因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的
时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable
等方法来提升连接测试的性能。Default: false -->
<property name="testConnectionOnCheckout" value="false"/>
这么详细的配置,我还是第一次真正的了解!!!
最后改,此贴提到了解决的方法,增加如下两项配置:
<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements
属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->
<property name="maxStatements" value="0"/>
<!--连接池用完时客户调用getConnection()后等待获取连接的时间,单位:毫秒。超时后会抛出-->
<!--SQLEXCEPTION,如果设置0,则无限等待。Default:0-->
<property name="checkoutTimeout" value="100"/>
我抱着试一试的态度,修改了项目里的配置,重启服务,走你!!!
效果非常明显,运行了8个小时了,都没有宕机,未响应的情况!!!!
http://www.ya178.com/public/detailUA-11849-1.html
http://www.ya178.com/public/detailUU-39-1.html
分享到:
相关推荐
C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`hibernate-c3p0-4.0.0.Final[1].jar`以及`mchange-commons-java-0.2.3.4.jar`。 1. **c3p0-0.9.2.1.jar**: 这是C3P0的主要库文件,包含了C3P0的...
2. **自动检测和回收死锁**:C3P0具有内置的机制来检测和处理长时间未使用的连接,避免因数据库连接泄漏导致的问题。 3. **连接测试**:在分配给应用程序之前,C3P0会自动对数据库连接进行有效性测试,确保获取的...
C3P0是一款开源的Java连接池,全称为ComMChange V2 C3P0,由M. J. Franklin创建并维护。它提供了一种高效、灵活且强大的数据库连接管理方式,广泛应用于Java应用程序中,特别是对于那些需要大量并发数据库访问的Web...
C3P0连接池是Java开发中广泛使用的数据库连接池技术,它允许应用程序高效、便捷地管理和重用数据库连接,从而提升系统性能并减少资源消耗。C3P0由Miquel Armandariz开发,它是一个开源项目,基于Apache 2.0许可证...
C3P0提供了一些高级特性,如自动检测死锁、空闲连接测试、连接池大小动态调整等。 二、C3P0的配置 1. 添加依赖:在项目中引入C3P0的依赖库,通常是在Maven的pom.xml文件中添加对应的依赖项。 2. 配置文件:C3P0的...
C3P0因其高效、稳定和易于配置的特点而受到开发者的青睐,尤其是它被集成到ORM框架Hibernate的默认配置中,进一步提高了其知名度。 C3P0的主要功能包括: 1. **连接池管理**:C3P0能够创建和维护一个数据库连接池...
c3p0的其他高级特性还包括自动检测死锁、空闲连接测试、连接生命周期管理等。开发者可以根据需要调整配置参数,优化数据库性能。通过熟练掌握c3p0的使用,可以有效地提升应用程序处理数据库的能力,减少资源浪费,...
2. **自动检测死锁**:c3p0可以定期检测并回收可能存在的死锁连接,保证系统的稳定运行。 3. **连接测试**:在返回给应用程序之前,c3p0会对连接进行有效性检查,确保获取到的是健康的数据库连接。 4. **多线程支持*...
2. **自动检测与回收**:C3P0会定期检查连接的有效性,发现死锁或超时的连接会自动回收,确保应用使用的是健康状态的连接。 3. **连接池配置**:C3P0提供丰富的配置选项,如最小、最大连接数,测试连接的SQL语句,...
2. **自动检测与修复**:c3p0可以定期检查连接的有效性,如果发现死锁或超时,会自动关闭并重新创建新的连接。 3. **连接池扩展性**:允许用户自定义连接创建、验证和销毁的策略,以适应不同的数据库环境。 4. **...
1. 自动管理连接:C3P0会自动检测并关闭无效的连接,避免死锁问题。 2. 连接池大小动态调整:可以根据实际负载自动调整连接池的大小。 3. 空闲连接测试:定期对连接进行有效性检查,确保获取的连接都是可用的。 4. ...
此外,c3p0还提供了自动检测死锁、空闲连接回收、连接超时等多种特性,确保了数据库连接的稳定性和效率。 3. **c3p0-oracle-thin-extras-0.9.5.5.jar**: 这个JAR文件是针对Oracle数据库的特定扩展,它提供了对...
C3P0提供了一些高级特性,例如自动检测死锁、自动重试失败的连接、连接健康检查等。它还支持细粒度的连接池配置,可以根据应用需求调整各种参数,比如最小空闲连接数、获取连接超时时间、测试连接的SQL语句等。通过...
2. **c3p0特性**: c3p0具有自动检测死锁、空闲连接测试、自动扩缩容连接数量等特性,提高了系统的并发处理能力和资源利用效率。 **二、c3p0配置** 1. **初始化配置**: 开发者可以通过`c3p0-config.xml`文件或程序...
JavaEE C3P0简单案例 在JavaEE开发中,数据库连接管理是一个至关重要的环节,因为有效管理和优化数据库连接可以显著提升应用的性能和稳定性。C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范...
C3P0的主要优点包括自动检测死锁、连接测试、连接池大小动态调整等,这些特性使得C3P0在处理多并发和长时间运行的应用中表现优秀。 **三、配置C3P0连接池** 在Spring项目中使用C3P0,首先需要在项目的`pom.xml`文件...
C3P0由Mchange公司开发,它具有自动检测死锁、空闲连接检测以及多种配置参数以优化性能的特点。 1. **C3P0核心概念** - 数据库连接:是应用程序与数据库交互的桥梁,创建和关闭都需要消耗资源。 - 连接池:预先...
- **c3p0特性**:c3p0提供了许多高级特性,如自动检测死锁、连接测试、空闲连接回收、连接池大小动态调整等。 2. **c3p0的配置与使用** - **配置文件**:c3p0的配置通常通过`c3p0.properties`文件或在代码中设置`...