日期:2014-05-16  浏览次数:20525 次

Java数据库连接池(三)

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