`
power1128
  • 浏览: 24401 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

如何发现数据库连接泄露

阅读更多

 

     1. 根据日志查找;
     首先,翻看系统日志,找到连接池溢出的时刻。然后,对应这个时间,查找用户正在进行的操作。
     这种方法适合于不启动任何监控程序或进程,不改变系统设置,就能人为的缩小可能泄露连接的代码范围。

     2. 利用连接池本身的utility设施;比如C3P0,以下是需要用到的两个参数(推荐):
unreturnedConnectionTimeout
Default: 0
Seconds. If set, if an application checks out but then fails to check-in [i.e. close()] a Connection within the specified period of time, the pool will unceremoniously destroy() the Connection. This permits applications with occasional Connection leaks to survive, rather than eventually exhausting the Connection pool. And that's a shame. Zero means no timeout, applications are expected to close() their own Connections. Obviously, if a non-zero value is set, it should be to a value longer than any Connection should reasonably be checked-out. Otherwise, the pool will occasionally kill Connections in active use, which is bad. This is basically a bad idea, but it's a commonly requested feature. Fix your $%!@% applications so they don't leak Connections! Use this temporarily in combination with debugUnreturnedConnectionStackTraces to figure out where Connections are being checked-out that don't make it back into the pool!

debugUnreturnedConnectionStackTraces
Default: false
If true, and if unreturnedConnectionTimeout is set to a positive value, then the pool will capture the stack trace (via an Exception) of all Connection checkouts, and the stack traces will be printed when unreturned checked-out Connections timeout. This is intended to debug applications with Connection leaks, that is applications that occasionally fail to return Connections, leading to pool growth, and eventually exhaustion (when the pool hits maxPoolSize with all Connections checked-out and lost). This parameter should only be set while debugging, as capturing the stack trace will slow down every Connection check-out.


     当我们同时使用这两个参数时,比如unreturnedConnectionTimeout设为5秒,debugUnreturnedConnectionStackTraces设为true。那么,当一个连接被check out 5秒,还没有被check in的时候,连接池会抛出一个错误堆栈。有了堆栈,那我们就可以精确定位出现问题的代码位置了。
     当然,这个方法中的参数并不是C3P0特有的,其他连接池配置中,应该也有类似的参数。
     
分享到:
评论

相关推荐

    Java 数据库连接泄漏 解决方法

    ### Java 数据库连接泄漏及其解决方法 #### 一、引言 在软件开发过程中,特别是在使用Java进行Web应用开发时,数据库连接管理是一项至关重要的任务。不当的连接管理会导致资源浪费,甚至引发系统性能问题。其中,...

    数据库连接池技术详解

    对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接的配置,实现数据库...从而避免了常规数据库连接操作中可能出现的资源泄漏 。 由于数据库连接得到重用,避免了频繁创建、释放连接引起的大量性能开销。

    Java jdbc数据库连接池总结

    Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...

    数据库连接池 java 整理

    在实际应用中,还需要考虑事务管理、安全性、连接泄露检测等高级特性。例如,使用Spring框架可以方便地进行声明式事务管理,通过AOP(面向切面编程)自动处理事务的开始、提交、回滚等操作。 总之,数据库连接池是...

    监控数据库连接

    数据库连接监控是确保数据库系统稳定运行的关键,它可以帮助我们了解数据库的实时状态,如活动连接数、等待连接数、连接超时、资源占用等,以便及时发现并解决性能问题。 在IT领域,监控数据库连接通常涉及以下知识...

    JSP数据库连接池连接实例

    - 关闭连接时务必正确,否则可能导致连接泄露。 - 定期更新连接池库,以获取最新的性能优化和安全修复。 - 避免在高并发场景下,连接池配置过小导致的连接等待问题。 通过上述步骤,你可以理解JSP中如何使用...

    数据库连接池-连接的关闭内幕

    ### 数据库连接池-连接的关闭内幕 在深入探讨数据库连接池中连接关闭的问题之前,我们首先需要了解数据库连接池的基本概念以及它在现代应用程序中的重要性。数据库连接池是一种管理多个数据库连接的方法,旨在提高...

    数据库连接 数据库的简单连接

    数据库连接是IT领域中至关重要的一个概念,尤其是在开发基于数据的应用程序时。本文将深入探讨数据库连接以及如何实现简单的数据库连接,主要以Java中的JDBC(Java Database Connectivity)为例进行讲解。 首先,...

    JAVA 完整的数据库连接池实现

    Java 数据库连接池是 Java 应用程序中用于管理数据库连接的重要工具,它极大地提高了应用程序的性能和效率。本文将详细介绍如何在 Java 中实现一个完整的数据库连接池,并探讨其核心概念、工作原理以及如何根据需求...

    delphiADO数据库连接池

    4. **异常处理与内存管理**:修复了"free时很慢"和"free时有内存泄露"的问题,意味着该连接池在释放连接或对象时进行了优化,确保了快速释放和无内存泄漏,这是任何高质量代码都需要关注的关键点。 `使用说明.txt`...

    数据库连接池的图解原理

    - **连接管理复杂**:每次都需要显式地关闭连接,一旦忘记或者由于程序异常未能关闭,就会导致数据库连接泄漏,最终可能需要重启数据库服务才能恢复。 - **连接稳定性差**:单一连接长时间使用可能导致连接不稳定,...

    web中常用数据库连接池

    数据库连接池在Web开发中扮演着至关重要的角色,它是一种管理数据库连接的机制,通过复用已存在的数据库连接,而不是每次请求时都创建新的连接,从而显著提高了应用程序的性能和效率。这一技术对于大型、高并发的Web...

    java数据库连接池源代码

    Java数据库连接池(Database Connection Pool)是Java应用中用于管理数据库连接的一种技术,它通过预创建并维护一定数量的数据库连接来提高应用的性能和效率。数据库连接池的基本原理是,当应用程序需要与数据库交互...

    补充 数据库连接池.ppt

    【数据库连接池】是软件开发中用于管理数据库连接的一种技术,旨在提高数据库操作的效率和资源利用率。在传统的JDBC数据库编程中,每个数据库操作都需要建立、使用和关闭数据库连接,这种模式存在明显的性能瓶颈和...

    数据库连接文档pdf

    ### 数据库连接管理的重要性 在软件开发领域,尤其是在构建中大型系统时,数据库的应用不可或缺。数据库作为存储和处理数据的核心组件之一,其性能直接影响到整个系统的稳定性和响应速度。然而,若缺乏有效的数据库...

    数据库连接池原理

    ### 数据库连接池原理 #### 一、背景与价值 ##### 1.1 背景 在现代软件开发中,应用程序与数据库之间的交互是非常常见的。为了提高这种交互的效率和减少资源消耗,通常会使用数据库连接池技术。连接池位于应用...

    不平凡的数据库连接类

    在实际开发中,硬编码数据库连接参数(如驱动程序、连接字符串、用户名和密码)通常是不推荐的,因为这可能导致代码难以维护,同时也增加了敏感信息泄露的风险。将这些信息存储在外部资源文件(如properties文件或...

Global site tag (gtag.js) - Google Analytics