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.properties和poolname.properties两个配置文件,可以任意扩展连接池和数据库。具体dbname.properties的配置项为数据库对应的JDBC驱动的,java.sql.Connection的实现类,也就是数据库连接池(二)中提到的,physicalConnection。而poolname.properties对应的配置项则是连接池对应JDBC驱动的java.sql.DataSource实现类,也就是数据库连接池(二)中提到的,PooledDataSource的概念。
.
4.点击确定后,即可进行监控。
连接消耗监控:是指每次调用从数据库连接池中获取一个连接所消耗的微毫秒数。
连接数监控:连接数监控分为3个指标,分别是pooled、created、closed,pooled是指连接池中现有的连接数数量(可能有误差,其需要一段时间的统计较为精确,另外也和压力有关系)。Created和closed是指创建的物理连接数和关闭的物理连接数(如果想要观察这两项,最好是先启动DBPoolTrace进行监控,然后启动压力测试工具进行压测)。
请求压力监控:请求压力是指每个钟调用getConnection的次数,也就是整个连接池的压力。
DBPoolTrace的工具还不够完善,如有兴趣的同学可以一起来研究,并不断完善其功能。我的联系方式mgoann@126.com。
DBPoolTrace最初只是为了阐述我其中的一篇博文,数据库连接池(二)中,关于连接池一些共通的特性,但是做到最后,发现DBPoolTrace能够做的事情非常多。其实可以做到和JDK自带的工具jvisualvm一样的效果。
我的想法是不要做一些重复的轮子,毕竟已经有这样的工具了,并且非常成熟,我是想做一些可以讲BTrace的抓取信息可视化的工具。
DBPoolTrace工具下载
dbpooltrace.rar
相关推荐
JAVA数据库连接池 能够减少对内存的消耗 提高了性能
java数据库连接池代码,实例代码、注释
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
该文章把数据库连接池的内部原理写的非常透彻,注释也非常完整,是非常难得的一篇好文章,让开发人员可以更深层次的理解数据库连接池。该文件对可以设置连接池的初始大小、连接池自动增加的大小、 连接池最大的大小...
Java数据库连接池.
在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁
Java数据库连接池详解(三)
Java数据库连接池的使用示例,与大家共享下
数据库链接池,以及连接池的概念,自己做的笔记
java 数据库 连接池驱动.rar java 数据库 连接池驱动.rar java 数据库 连接池驱动.rar
无框架配置,纯java数据库连接池的配置。rar包中包含2个文件,一个是DBPool.java文件,一个是配置文件。
java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip java数据库连接池connectionPool.zip
Java数据库连接池详解(一)
达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,达梦7数据库连接池,jdbcDriver,
虽然现在用APACHE COMMONS DBCP可以非常方便的建立数据库连接池, 但是像这篇文章把数据库连接池的内部原理写的这么透彻,注视这么完整, 真是非常难得,让开发人员可以更深层次的理解数据库连接池。
java 数据库连接池的实现代码 java 数据库连接池的实现代码 java 数据库连接池的实现代码
一个效果非常不错的JAVA数据库连接池,代码很清楚,注释很多。