下面是一个通过btrace查找dbcp数据库连接池泄露的方法,如果使用的是其他的连接池,方法大同小异,只是更换一下打开和关闭数据库连接的类就好。
虽然spring,mybatis等框架已经提供了各种管理数据库连接的模板,但是实际的环境中,我们还是会遇到直接向连接池申请连接的情况,如果遇到这种情况,由于开发人员的疏忽,很可能忘记关闭数据库连接,如出现数据库连接泄露的情况,使用btrace会是一个很好的解决方案。
我在平安工作中,就遇到过一次数据库泄露,从发现问题到最后解决,花费了三个小时的时间。造成了很恶劣的影响,全国的平安车险系统直接停用三个小时。
关于btrace相关的命令和使用方式(BTrace 是一款利用hotSpot虚拟机可以动态替换class的特点而完成的,可以对在线的程序动态的改变类的行为(一般为加些打印日志),进而进行线上调试的一个工具。),可去官网:https://kenai.com/projects/btrace/
下面是使用方法介绍:
1.查看日志,如果发现类似的日志,只有两种可能,一是可用连接数设置小了,二是连接池泄露了。
Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
2.通过jps命令查询应用程序的进程id
3.btrace [进程id] BTraceDHCPConnection.java 命令
跟踪成产系统,分析打开和关闭连接是否成对出现,并打印当时的线程dump,可以看到哪些业务方法操作了数据库,从而直接定位问题所在。
分享到:
相关推荐
DBCP(Database Connection Pool)是Apache软件基金会的Commons DBCP项目提供的一款开源的数据库连接池组件。数据库连接池在Java应用中扮演着至关重要的角色,它通过维护一定数量的数据库连接,实现了数据库连接的...
DBCP(DataBase Connection Pool)是Apache组织开发的一个开源数据库连接池组件,它是Java应用程序中用于高效管理数据库连接的重要工具。数据库连接池的概念是基于资源复用的原理,它避免了频繁地创建和销毁数据库...
**数据库连接池(DBCP)** 是一个在Java应用程序中管理数据库连接的工具,它能够有效地提高数据库操作的性能和效率。DBCP全称为`Jakarta Commons DBCP`,是Apache软件基金会的一个项目,提供了对数据库连接的池化...
综上所述,DBCP数据库连接池是Java Web开发中常用的一种数据库连接管理工具,通过合理的配置和使用,可以显著提高应用的性能和稳定性。在实际项目中,结合Spring等框架,可以更便捷地管理和使用数据库连接。确保正确...
3. 获取和释放连接:在需要使用数据库的地方,通过`BasicDataSource.getConnection()`方法获取连接,使用完毕后调用`Connection.close()`,实际上并不会真正关闭,而是返回给连接池。 4. 关闭连接池:在应用关闭时,...
总之,DBCP是一个强大的数据库连接池实现,它通过Apache Commons Collections和Pool库的支持,为Java应用程序提供了高效的数据库连接管理。在Spring框架中整合DBCP,可以简化数据库连接的生命周期管理,提升应用性能...
DBCP(Database Connection Pool)是Apache软件基金会的一个开源项目,全称为Apache Commons DBCP,它是一个基于Java的数据库连接池实现。在Java应用程序中,DBCP被广泛用于管理数据库连接,以提高性能和资源利用率...
Apache DBCP(Database Connection Pool)是Apache软件基金会下的一个开源项目,主要提供数据库连接池服务。数据库连接池在Java应用程序中扮演着重要的角色,它能够有效地管理数据库连接,提高应用性能并降低资源...
4. **获取与释放连接**: 使用数据源的`getConnection()`方法获取数据库连接,使用完毕后调用`close()`方法返回到连接池,而不是关闭连接: ```java Connection conn = dataSource.getConnection(); // 执行SQL...
NULL 博文链接:https://xiongjiajia.iteye.com/blog/1295094
数据库连接池(Database Connection Pool,简称 DBCP)是一种在多用户并发环境下高效管理数据库连接的技术。它通过预先创建一定数量的数据库连接并存储在内存池中,供多个应用程序共享,从而避免了频繁地创建和关闭...
DBCP(Database Connection Pool)是Apache的一个开源项目,它提供了一个数据库连接池组件,...以上是DBCP数据库连接池的基本使用和配置方法,通过这种方式,可以有效地管理和优化数据库的连接,提高系统的运行效率。
单独使用dbcp需要3个包:commons-dbcp.jar,commons-pool.jar,commons-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库...
3. 获取连接:在需要访问数据库时,通过连接池的`getConnection()`方法获取连接。 4. 使用连接:执行SQL查询或更新操作。 5. 归还连接:使用完毕后,必须调用`Connection.close()`方法,但实际连接不会被关闭,而是...
而DBCP通过预先配置一定数量的数据库连接,并将这些连接维护在一个池中,应用程序可以随时从池中获取和归还连接,避免了重复的创建和销毁操作,提升了效率。 DBCP的工作原理主要包括以下几个步骤: 1. 初始化:应用...
数据库连接池(Database Connection Pool,简称 DBCP)是一种在多用户并发访问数据库时提高数据库系统性能的技术。它通过预创建并管理一定数量的数据库连接,避免了每次连接数据库时的初始化开销,同时也能有效地...
DBCP(Database Connection Pool)是Apache的一个开源项目Commons DBCP,它提供了一个数据库连接池的实现。数据库连接池在初始化时会创建一定数量的数据库连接,这些连接在应用程序中可以被复用,从而避免了频繁创建...