java如何检测连接池连接情况,如何监控数据库连接池(JDBC Connection Pool)

本文中,我将介绍利用Dynatrace AppMon监控JDBC Connection Pool的一些技巧,以便快速诊断JDBC Connection Pool是否存在泄露和监控JDBC Connection Pool的使用率。通过监控获取和归还Connection的JAVA方法的执行次数差异,来判断是否存在连接池泄露。对于连接池的使用率,我们可以间接的通过监控获取Connection的JAVA方法的执行时间,来判断连接池是否处于利用率饱和状态。

不同的JDBC Connection Pool使用的获取连接和归还连接的JAVA方法不一样,这里我们以Tomcat JDBC Pool为例来阐述监控设置。

Tomcat JDBC Pool获取Connection的方法:

org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection()

Tomcat JDBC Pool归还Connection的方法:

org.apache.tomcat.jdbc.pool.ConnectionPool.returnConnection(...)

首先,我们创建自定义感应器(custom sensor)来监控这两个方法:

在PurePath树中,我们就可以看到这些方法的调用情况,说明已经正常监控起来了:

4bbf094672c805c6900689cab7c3db4b.png

接下来,我们创建两个测量(measure)来监控这两个方法的调用次数。获取Connection方法的测量,测量的类型为方法调用次数:

bdda33cf423cd0a72273f283541cac8d.png

归还Connection方法的测量:

dd4884e76402f8f4e17460a9355ec829.png

最后,创建一个仪表图来对比上述两个测量的值。通过对比这两个方法的调用次数,我们可以判断是否存在连接池泄露,即当归还方法的调用次数明显少于获取方法的调用次数 - 有借无还,那么就肯定出现了连接池泄露。

c55013fb0e943b0dc3b56ce23d17633d.png

当然,我们也可以利用比例(rate)测量,把获取Connection的测量当作分母,归还Connection的测量当作分子,计算二者的百分比值(比如小于90%)来判断是否存在内存泄露,以便我们创建基于该比例测量的告警。

对于数据库连接池利用率的监控,我不建议直接去监控该利用率的值,因为这个值变化太快,即使100%的利用率也不能肯定是存在性能问题,具体原因可以参考这篇博客:https://www.dynatrace.com/blog/the-reason-i-dont-monitor-connection-pool-usage。正如博客中推荐的一样,通过监控获取JDBC Connection的时间来判断连接池是否存在性能瓶颈。而这里我们获取JDBC Connection的JAVA方法为:org.apache.tomcat.jdbc.pool.ConnectionPool.getConnection()

于是,我们可以创建监控该方法执行时间的测量,设置告警级别阀值为200毫米(警告)和500毫米(严重):

至此,我们完成了对JDBC Connection Pool的监控,并通过仪表图和告警的方式实时展示JDBC Connection Pool的性能状态。

对于其他JDBC Connection Pool的实现(DBCP, c3p0等),文章描述的方法也适用,最关键一点是找准各个JDBC Connection Pool的获取Connection和归还Connection的方法。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值