通过btrace查找dbcp数据库连接池泄露的方法

标签: btrace dbcp 数据库 | 发表时间:2014-06-16 21:30 | 作者:xiaodaoliu1
出处:http://www.iteye.com
    下面是一个通过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,可以看到哪些业务方法操作了数据库,从而直接定位问题所在。

已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [btrace dbcp 数据库] 推荐:

通过btrace查找dbcp数据库连接池泄露的方法

- - Java - 编程语言 - ITeye博客
    下面是一个通过btrace查找dbcp数据库连接池泄露的方法,如果使用的是其他的连接池,方法大同小异,只是更换一下打开和关闭数据库连接的类就好.     虽然spring,mybatis等框架已经提供了各种管理数据库连接的模板,但是实际的环境中,我们还是会遇到直接向连接池申请连接的情况,如果遇到这种情况,由于开发人员的疏忽,很可能忘记关闭数据库连接,如出现数据库连接泄露的情况,使用btrace会是一个很好的解决方案.

BTrace功能

- - zzm
       在生产环境中可能经常遇到各种问题,定位问题需要获取程序运行时的数据信息,如方法参数、返回值、全局变量、堆栈信息等. 为了获取这些数据信息,我们可以 通过改写代码,增加日志信息的打印,再发布到生产环境. 通过这种方式,一方面将增大定位问题的成本和周期,对于紧急问题无法做到及时响应;另一方面重新部 署后环境可能已被破坏,很难重新问题的场景.

BTrace使用简介

- LightingMan - 淘宝JAVA中间件团队博客
BTrace通过动态的挂接用java写的代码到运行时上来获取到一些运行细节,例如典型的使用btrace的方法为:. btrace -cp [btrace的jar所在的路径,默认为btrace/build下] [pid] [需要运行的java代码]. 如在程序运行的情况下,想知道调用CaseObject的execute方法的以下几种情况,在BTrace中可以这么做:.

dbcp基本配置和重连配置

- - 开源软件 - ITeye博客
最近在看一些dbcp的相关内容,顺便做一下记录,免得自己给忘记了. initialSize :连接池启动时创建的初始化连接数量(默认值为0). maxActive :连接池中可同时连接的最大的连接数(默认值为8,调整为20,高峰单机器在20并发左右,自己根据应用场景定). maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池中idle的个数 上升超过maxIdle,而造成频繁的连接销毁和创建,类似于jvm参数中的Xmx设置).

解读dbcp自动重连那些事

- - Java - 编程语言 - ITeye博客
1. 数据库意外重启后,原先的数据库连接池能自动废弃老的无用的链接,建立新的数据库链接. 2. 网络异常中断后,原先的建立的 tcp 链接,应该能进行自动切换. 比如网站演习中的交换机重启会导致网络瞬断. 3. 分布式数据库中间件,比如 cobar 会定时的将空闲链接异常关闭,客户端会出现半开的空闲链接.

BTrace简单实用教程

- - ITeye博客
BTrace本身也是可以独立运行的程序,作用是在不停止目标程序运行的前提下,通过HotSpot虚拟机的HotSwap技术动态插入原本不存在的调试代码. 比如遇到了我们的程序出问题,而又没有足够的打印语句时,我们一般的方法是不得不停掉服务,然后修改代码,增加打印语句,重新编译重新运行来解决,效率很低.

BTrace入门及使用实例

- - 互联网 - ITeye博客
Btrace (Byte Trace)是sun推出的一款java 动态、安全追踪(监控)工具,可以不停机的情况下监控线上情况,并且做到最少的侵入,占用最少的系统资源. 1.下载[btrace|http://kenai.com/projects/btrace/downloads/directory/releases]包 并把btrace的命令放到path中.

DBCP、C3P0、Proxool 、 BoneCP开源连接池的比较(转)

- - 数据库 - ITeye博客
转载地址: http://blog.csdn.net/miclung/article/details/7231553. DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用. 可以设置最大和最小连接,连接等待时间等,基本功能都有,此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此外不提供连接池监控.

HouseMD, 比BTrace更实用的Java运行诊断工具

- - ITeye博客
HouseMD 是一款非常敏捷的. Java进程运行时的诊断调式命令行工具, 它具备安全易用高效的特点, 让它非常适合在要求严格的线上(生产)环境中使用.. Tab自动补全或候选列表提示. SimpleName)和方法名(可选)限定跟踪目标. 支持根据抽象类或接口来限定其实现类的跟踪目标. 支持实时显示跟踪目标的摘要统计.

btrace拓展工具-java应用性能诊断优化利器

- - CSDN博客推荐文章
Btrace是一个实时监控工具,可以无需修改应用代码(事实上它修改了字节码),来达到不可告人的秘密. 它可以获取应用程序代码的执行时间,他可以让你无需修改代码,帮你做时间的打点. 但是,你需要编写btrace脚本,它是一个java文件. 在Eclipse中编写java类很简单,在linux上,vm不熟悉的可能就会比较痛苦了,并且脚本可复制性很强.