`
zhaoshijie
  • 浏览: 2261885 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跟踪 C3p0 连接池连接泄漏之参数优化与日志分析

 
阅读更多




  <property name="unreturnedConnectionTimeout"><value>100</value></property>

  <property name="debugUnreturnedConnectionStackTraces"><value>true</value></property>

跟踪 C3p0 连接池连接泄漏

debugUnreturnedConnectionStackTraces、unreturnedConnectionTimeout参数的说明,此篇日志进一步介绍应用这两个参数后的一些经验。

首先,为了跟踪问题,debugUnreturnedConnectionStackTraces参数肯定是设置为true的。下面主要说明 unreturnedConnectionTimeout参数的设置,unreturnedConnectionTimeout参数是在连接被应用程序 checkout后指定时间内未checkin则由连接缓冲池执行kill操作,同时打印堆栈跟踪信息。在我的应用里,maxIdleTime的设置是 120秒,所以,我把unreturnedConnectionTimeout设置成150秒,如果达到最大存活时间后,连接还是不能被连接缓冲池正常关闭,那么肯定出现了连接泄漏,此时,再过30秒后,由连接缓冲池主动执行kill。

通过以上设置后,确实收获了一些成果,通过分析日志,找到了连接泄漏问题代码。异常信息如下:

    2011-04-06 15:49:42,599 INFO : com.mchange.v2.resourcepool.BasicResourcePool.removeResource(BasicResourcePool.java:1395) – Logging the stack trace by which the overdue resource was checked-out.
    java.lang.Exception: DEBUG ONLY: Overdue resource check-out stack trace.
    at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:506)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:525)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
    at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:82)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:423)
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
    at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:139)
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1547)
    at org.hibernate.loader.Loader.doQuery(Loader.java:673)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:289)
    at org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1695)
    at org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:142)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:152)
    at com.leo.dao.XXXDAO.queryXXX(XXXDAO.java:20)
    at jsp_servlet._keyareas._country.__taskcdb_add._jspService(__taskcdb_add.java:195)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:34)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
    at weblogic.servlet.internal.ServletStubImpl.onAddToMapException(ServletStubImpl.java:416)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:326)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:183)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:526)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:253)

通过堆栈信息,很容易就确认了问题点。这个问题点是由于DAO使用不规范导致的,XXXDAO继承了HibernateDaoSupport,在方法中使用了getHibernateTemplate().getSessionFactory().openSession()获得session,然后通过session.createSQLQuery(),随后却并没有执行session.close()。

关于日志大小:在目前 maxIdleTime=120,maxPoolSize=18,minPoolSize=5,idleConnectionTestPeriod=30 的情况下,日志PatternLayout %d %-5p: %l – %m%n,一天的日志记录情况大约是12M,在硬盘空间允许的情况下建议按天存储日志。
分享到:
评论
1 楼 bujinpeng 2013-01-10  
谢谢,帮助我从一个侧面解决了问题

相关推荐

    c3p0连接池jar包

    - 监控与日志:启用C3P0的日志功能,便于监控连接池的状态和诊断问题。 - 异常处理:在使用C3P0时,需捕获并处理可能出现的异常,确保程序的健壮性。 6. **与其他连接池比较**: - DBCP(Apache Commons DBCP)...

    C3P0连接池参数配置

    正确配置这些参数对于优化C3P0连接池的性能和稳定性至关重要。例如,如果你的应用程序在高并发下运行,可能需要增加`maxPoolSize`和`acquireIncrement`来应对更多的连接请求。同时,设置合理的`maxIdleTime`和`...

    C3p0连接池问题

    C3p0连接池是Java应用中常用的数据库连接池组件,它通过管理数据库连接,提高应用程序的性能和效率。在处理大量并发请求时,数据库连接池可以有效地避免频繁地创建和销毁数据库连接,从而降低系统资源消耗。这篇博客...

    c3p0连接池相关包

    C3P0连接池是Java开发中常用的数据库连接池组件,尤其在Spring框架的应用中扮演着重要的角色。它由Mchange公司开发,提供了一种高效、灵活且稳定的数据库连接管理方式,有效地解决了数据库连接资源的分配与回收问题...

    c3p0连接池常用jar(c3p0.jar和mchange-commons-java-.jar)

    在实际开发中,还可以根据项目的具体需求,通过调整C3P0的各种配置参数,来优化连接池的性能和资源利用率。同时,为了确保系统稳定,还需要关注C3P0的日志信息,及时发现并解决可能出现的连接泄漏、资源耗尽等问题。...

    druid连接池与C3P0连接池jar包.rar

    在Java世界里,有两个非常著名的数据库连接池实现:Druid和C3P0。下面我们将深入探讨这两个连接池的技术细节以及它们的特点。 首先,让我们来看看Druid连接池。Druid是由阿里巴巴开发的一款高性能的数据库连接池...

    day18 17.c3p0连接池使用

    最后,C3P0提供了丰富的监控和日志功能,可以通过MBean或者日志记录来监控连接池的状态,以便进行性能调优和问题排查。例如,可以启用`debugUnreturnedConnectionStackTraces`属性来追踪未归还的连接,帮助找出可能...

    c3p0数据连接池

    c3p0 提供了丰富的配置选项,可以根据不同的应用场景调整连接池的参数。 ##### 连接池基本配置 - `minPoolSize`: 最小连接数。 - `maxPoolSize`: 最大连接数。 - `acquireIncrement`: 每次增加的连接数。 - `...

    c3p0-lib.zip

    4. 监控和管理:c3p0提供了一些监控和日志功能,可以跟踪连接的生命周期、检测空闲连接的健康状况、自动测试并关闭无效连接等。 5. 故障恢复:当数据库连接出现问题时,c3p0可以尝试重新建立连接,增加了系统的健壮...

    java hibernate c3p0

    【标题】:“Java Hibernate C3P0”是一个关于Java编程中的持久化框架Hibernate与C3P0连接池的讨论。Hibernate是Java领域广泛使用的对象关系映射(ORM)框架,它简化了数据库操作,使开发者可以使用面向对象的方式来...

    c3p0各个版本的jar 以及依赖的jar

    2. 连接池参数设置:C3P0提供了丰富的参数来调整连接池的行为,如初始化连接数、最大连接数、最小空闲连接数、测试连接的SQL语句等。这些参数可以根据应用的并发量和数据库服务器的负载进行合理设定。 3. 连接超时...

    基于java的数据库连接池 C3P0.src.zip

    6. **C3P0与其他连接池比较** - DBCP(Apache Commons DBCP):较老且相对简单,但功能相对较少。 - HikariCP:高性能,设计简洁,但配置相对复杂。 - Druid:阿里开源,功能丰富,支持监控和日志,但可能比C3P0...

    c3p0需要的jar包

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序,尤其是使用Hibernate等ORM框架时,C3P0是一个常见的选择,因为它能有效地管理和优化数据库连接,提高应用...

    基于Java的数据库连接池 C3P0.src.zip

    这个压缩包"基于Java的数据库连接池 C3P0.src.zip"包含的是C3P0 0.9.2-pre4版本的源代码,这对于开发者深入理解C3P0的工作原理以及进行定制化开发非常有帮助。 C3P0的主要功能和特性包括: 1. **连接管理**:C3P0...

    java c3p0例子

    通过这样的配置,你可以更好地跟踪和调试C3P0连接池的行为。 总的来说,`java c3p0例子`是Java开发中一个重要的数据库连接池实现,它提供了高效、稳定的数据库连接管理,帮助开发者优化应用程序性能。使用C3P0时,...

    c3p0配置mysql8.0.21的3个jar包

    在Java开发中,数据库连接管理是一项关键任务,而C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0库可以帮助我们高效、稳定地管理数据库连接,避免因数据库连接泄露或...

    Mybatis C3P0 整合

    C3P0 是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用中,整合Mybatis与C3P0可以提高数据库连接的管理和效率。下面我们将深入探讨Mybatis与C3P0整合的相关知识点。 ...

    c3p0所需jar包

    5. **C3P0与其他连接池的比较**:C3P0相对于DBCP和Apache DBCP,提供了更强大的连接池管理功能,例如连接测试策略、空闲连接检测等。然而,对于大型企业级应用,可能更倾向于使用HikariCP或Apache Tomcat JDBC Pool...

    C3P0.zip-cp30

    **C3P0详解——基于JDBC的数据库连接池** C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要功能是为数据库提供高效的连接管理和自动回收,从而提高应用的性能和...

Global site tag (gtag.js) - Google Analytics