`

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,在硬盘空间允许的情况下建议按天存储日志。

分享到:
评论

相关推荐

    C3P0连接池配置需要的jar包

    C3P0连接池是Java应用中常用的数据库连接池组件,它允许程序在不关闭物理连接的情况下,管理和重用数据库连接,从而提高了应用程序的性能和效率。C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`...

    c3p0连接池jar包

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

    c3p0连接池

    **c3p0连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0由Miquel Delgado开发,其核心功能在于提高了数据库连接的效率和管理,通过池化数据库连接来减少...

    c3p0连接池实例成功版(附源代码)

    本资源提供的“c3p0连接池实例成功版”包含了一系列必要的组件,使得开发者能够快速、便捷地在自己的项目中集成并使用C3P0连接池。下面我们将详细探讨C3P0连接池及其相关知识点。 1. **C3P0简介** C3P0是由Miquel...

    C3P0连接池参数配置

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,C3P0可以帮助我们管理数据库连接,提高应用程序的性能和稳定性。下面将详细介绍C3P0连接池的一些关键...

    C3P0连接池.rar

    C3P0还提供了许多高级特性,如自动重连、连接泄漏检测和监控等,这些特性使得C3P0成为Java开发中一个可靠的数据库连接池选择。不过,随着技术的发展,如今也有一些其他流行的连接池组件,如HikariCP和Druid,它们在...

    day18 17.c3p0连接池使用

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

    c3p0连接池.zip

    C3P0连接池是一个开源的Java数据源和JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0库被设计用来提高数据库连接的效率和性能,通过管理数据库连接的生命周期,避免了频繁创建和关闭...

    java后端开发-c3p0连接池.zip

    c3p0 是一个用于管理和提供...7.JMX 支持:8.c3p0 支持 Java Management Extensions (JMX),允许通过 JMX 监控和管理连接池的状态。9.重连机制:10.c3p0 具有自动重连机制,当数据库连接由于某些原因失效时,它可以尝

    javaweb后端开发用到的c3p0jar包javaweb后端开发用到的c3p0jar包.rar

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0 jar包的使用可以显著提升应用程序的性能,因为它可以有效地重用数据库连接,减少创建和销毁连接的时间开销。 1. **...

    java hibernate c3p0

    4. **连接池管理**:讲解如何通过C3P0监控数据库连接的状态,如检查连接是否有效、检测空闲连接的超时策略等。 5. **源码分析**:深入源码层面,理解C3P0如何处理数据库连接的创建、分配和释放,以及其与Hibernate...

    c3p0-官方.zip

    **c3p0连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0-0.9.1.2是其的一个版本,包含c3p0的核心库jar包以及相关的说明文档,用于帮助开发者理解和使用...

    c3p0需要的jar包

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

    c3p0包

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。这个库的主要功能是帮助管理数据库连接,提高数据库应用的性能和效率。在Java应用中,尤其是在服务器端处理大量并发请求时...

    c3p0和mchange匹配的版本

    在Java开发中,数据库连接管理是一个关键环节,而C3P0和MChange(也称为Vibur DBCP)是两个常用的数据库连接池组件。它们各自有着不同的特性和使用场景,但有时候为了优化数据库访问性能,我们会将两者结合使用。在...

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

    在这个"基于java的数据库连接池 C3P0.src.zip"压缩包中,包含了C3P0 0.9.2-pre4的源代码,我们可以深入研究其工作原理和如何在项目中进行配置和使用。 1. **C3P0基本概念** - 数据库连接池:数据库连接池在初始化...

    c3p0等数据库驱动.zip

    "c3p0等数据库驱动"这个主题主要涉及数据库连接池技术,特别是c3p0,以及可能关联到的其他数据库驱动。下面将详细阐述c3p0数据库连接池的工作原理、配置方法、优势与限制,并提及可能的替代方案。 c3p0是一个开源的...

    java c3p0例子

    此外,C3P0还支持连接池的监控和日志记录,通过`com.mchange.v2.log.MLog`类可以配置日志输出,例如设置为使用Log4j: ```java System.setProperty("c3p0.logLevel", "WARN"); System.setProperty("c3p0.logging....

    c3p0配置文件和操作说明

    c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java Web应用中,c3p0能有效地管理数据库连接,提高应用性能,避免频繁创建和关闭数据库连接带来的资源浪费。以下将详细...

Global site tag (gtag.js) - Google Analytics