论坛首页 Java企业应用论坛

Java数据库连接池(三)

浏览 22560 次
精华帖 (4) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-27   最后修改:2012-03-28

Java数据库连接池(三)

 

连接池监控工具

         前两篇博文阐述了连接池都有一些共性的地方,其结构大致相同,都具备几个概念,DataSource,Connection,ProxyConnection,Pool,PooledDataSource,PhysicalConnection、PooledConnection。那么是否可以根据连接池的这些特性,开发出一款针对于大部分连接池的监控工具,通过该监控工具我们可以在相对的环境中,对连接池的一些参数配置给出一些指导性建议,并根据这些建议结合自己的实际场景中的监控数据,做一次连接池的调优。这是我的一个初步的想法。

 

监控工具的监控维度

首先要确定是监控工具的监控维度,也就是我们需要监控哪些数据,哪些数据会对我们连接池的配置进行优化会给出直接性的指导性依据。哪些数据是可有可无的。

我们看一下这里数据库的一般参数,这里需要的强调的是,我们监控的维度只包括大部分数据库通用的一些特性或参数,由这些参数或特性决定体现出来的影响性能的地方。所以不包括一些连接池所特有的数据。

         那么这些参数和特性我已经在前一篇的博文中详细阐述过了。我们先从参数开始下手,其实最终我们是通过参数的调优来影响了连接池的性能,所以连接池的监控维度也应当与这些参数配置相关联,围绕着这些参数进行展开。

         我们先来再次阐述一下连接池如何使用这些参数进行工作的。连接池启动后,连接池先初始化initNum个连接,如果压力增大,连接池会不断的创建新的连接,直到达到MaxActiveNum个连接,这里有个问题就是如果initNum和MaxActiveNum之间相差太大的话,会造成每次获取连接都是重新创建一个连接,这样其实导致连接池所带来的性能收益大大降低。所以每次获取连接而没有空闲连接后,导致重新创建了一个连接, 应该是我们监控的一个点,其实可以把它理解为连接池的命中率(Hit rate)。连接池至启动以来所创建的物理连接数(PhysicalConnection)。连接池至启动以来所销毁的物理连接数。连接池空闲的连接数。正在使用的连接数。

实现方案

实现方案总体采用BTrace+JDBC+连接池一般规范+GUI+JFreeChat,将连接池的各个维度的数据通过可视化的界面展现出来,并且随着时间动态的展现。通过该中方法,可以达到对正在运行的Java进程无需重启达到连接池监控的目的,并且BTrace是安全的,对目标监控进程影响降到最小,通过可视化的界面,将目前市场上大部分的连接池兼容进来。

 

下图是DBPoolTrace的核心组件,以及各个组件之间的关系图:

 

配置组件:根据GUI组件中的输入,找到正确的配置,作为BTrace脚本引擎的输入。

BTrace脚本引擎:根据配置组件的输入,生成正确的BTrace跟踪脚本,作为BTrace控制组件的输入。

BTrace控制组件:主要负责BTrace的启动、停止,以及信号回传处理,交给JFreeChart组件。

JFreeChart组件:完成BTrace抓取的关键信息的可视化展现。

要求

         采用BTrace后,必须要对目标Java进程进行动态跟踪,

需要JDK1.6(含1.6)以上支撑,如果是JDK1.6一下,需要使用BTrace Agent启动目标进程。

BTrace不支持远程监控。如果需要监控JDK1.5,需要使用特殊命令启动目标JVM进程。

使用简介

1.下载后,解压DBPoolTrace.rar

2.双击start.bat

3.新建一个连接,填写目标JVM进程PID,选用的数据库连接池和数据库,如果是自定义的数据库连接池,可以修改Jar包中,dbname.propertiespoolname.properties两个配置文件,可以任意扩展连接池和数据库。具体dbname.properties的配置项为数据库对应的JDBC驱动的,java.sql.Connection的实现类,也就是数据库连接池(二)中提到的,physicalConnection。而poolname.properties对应的配置项则是连接池对应JDBC驱动的java.sql.DataSource实现类,也就是数据库连接池(二)中提到的,PooledDataSource的概念。

.

4.点击确定后,即可进行监控。

 连接消耗监控:是指每次调用从数据库连接池中获取一个连接所消耗的微毫秒数。


连接数监控:连接数监控分为3个指标,分别是pooledcreatedclosedpooled是指连接池中现有的连接数数量(可能有误差,其需要一段时间的统计较为精确,另外也和压力有关系)。Createdclosed是指创建的物理连接数和关闭的物理连接数(如果想要观察这两项,最好是先启动DBPoolTrace进行监控,然后启动压力测试工具进行压测)。


请求压力监控:请求压力是指每个钟调用getConnection的次数,也就是整个连接池的压力。


总结

DBPoolTrace的工具还不够完善,如有兴趣的同学可以一起来研究,并不断完善其功能。我的联系方式mgoann@126.com

DBPoolTrace最初只是为了阐述我其中的一篇博文,数据库连接池(二)中,关于连接池一些共通的特性,但是做到最后,发现DBPoolTrace能够做的事情非常多。其实可以做到和JDK自带的工具jvisualvm一样的效果。

我的想法是不要做一些重复的轮子,毕竟已经有这样的工具了,并且非常成熟,我是想做一些可以讲BTrace的抓取信息可视化的工具。

 

DBPoolTrace工具下载

dbpooltrace.rar

 

  • 大小: 46.8 KB
   发表时间:2012-03-27  
看起来很不错,学习下, 希望能贡献一份力量
0 请登录后投票
   发表时间:2012-03-27  
selvemen 写道
看起来很不错,学习下, 希望能贡献一份力量

谢谢,支持!
0 请登录后投票
   发表时间:2012-03-28  
loookto 写道
不错,支持一下!

非常感谢!
0 请登录后投票
   发表时间:2012-03-28  
不支持64位的。
0 请登录后投票
   发表时间:2012-03-28  
pinnerc 写道
不支持64位的。

用java做的!怎么个不支持法?
0 请登录后投票
   发表时间:2012-03-28   最后修改:2012-03-28

mysql是64位的
  • 大小: 9.1 KB
0 请登录后投票
   发表时间:2012-03-28  
感谢楼主分享,望楼主分享下源码,想自己完善一下。
0 请登录后投票
   发表时间:2012-03-28  
837062099 写道
感谢楼主分享,望楼主分享下源码,想自己完善一下。

源码已经附上,写的比较粗糙,请见谅!
0 请登录后投票
   发表时间:2012-03-28  
不错哦 ~  不知道有没有办法测mongodb ~
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics