下面是一个通过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数据库连接池需要用到的jar,包括源码和api文档,javadoc
java web开发 dbcp数据库连接池 所用jar包。java web开发 dbcp数据库连接池 所用jar包。
DBCP数据库连接池的完整jar包
dbcp数据库连接池用到的jar包,在spring4整合过程中测试通过。
DBCP(DataBase Connection Pool)数据库连接池,是java数据库连接池的一种,由Apache开发,通过数据库连接池,可以让程序自动管理数据库连接的释放和断开。
DBCP 数据库连接池 DBCP 数据库连接池 DBCP 数据库连接池 里面是DBCP的jar,导进去就可以用了
Apache的DBCP数据库连接池,好用的压缩包。凑字数凑字数
DBCP配置数据库连接池实现对数据库的连接并附上增删改查
NULL 博文链接:https://xiongjiajia.iteye.com/blog/1295094
关于DBCP数据库连接池配置整理宣贯.pdf
单独使用dbcp需要3个包:commons-dbcp.jar,commons-pool.jar,commons-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库...
适合学习练习用jar包
DBCP数据库连接池.pdf
DBCP数据库连接池借鉴.pdf
DBCP
DBCP数据库连接池终稿.pdf
关于DBCP数据库连接池配置整理.docx
java中DBCP数据库连接池使用方法以及代码文件:(dbcpconfig.properties+JdbcPool_dbcp.java)以及jjdbc所需的ar包(commons-pool.jar+commons-dbcp-1.2.2.jar)