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 public class BaseDao { private String dbUrl = ""; // 数据库URL private String jdbcDriver = ""; ...
Java JDBC 数据库连接池总结 Java 语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁。在 Web 应用开发的早期,主要使用的技术是 CGIASPPHP 等。之后,Sun 公司推出了基于 Java 语言的 ...
Java数据库连接池是Java开发中一个非常重要的技术,它主要用于管理数据库连接,提高数据库操作的效率和性能。在Java应用程序中,频繁地创建和关闭数据库连接会导致大量的系统资源浪费,而连接池则可以复用已建立的...
本篇文章将深入解析一个自定义的JAVA数据库连接池类,帮助开发者更好地理解和运用这一关键技术。 首先,连接池的基本思想是预先创建一定数量的数据库连接,并存储在一个集合(如Vector)中,供应用程序按需获取和...
总的来说,Java数据库连接池如C3P0和Druid,以及Spring的JdbcTemplate,都是为了优化数据库操作而设计的工具。它们各自有其特点和优势,开发者可以根据项目需求选择合适的技术。在使用过程中,充分理解和合理配置...
本项目提供了一个轻量级的Java数据库连接池实现,旨在简化开发过程,提高应用性能并降低资源消耗。下面将详细介绍这个轻量级Java数据库连接池的设计理念、工作原理以及如何使用。 1. **设计理念** 轻量级数据库...
Java数据库连接池是Java应用程序管理数据库连接的一种高效方式。它避免了每次需要访问数据库时创建新的连接,而是预先创建一定数量的连接并保存在池中,当程序需要时可以从池中获取,用完后归还,从而提高了系统性能...
Java 数据库连接池是 Java 应用程序中用于管理数据库连接的重要工具,它极大地提高了应用程序的性能和效率。本文将详细介绍如何在 Java 中实现一个完整的数据库连接池,并探讨其核心概念、工作原理以及如何根据需求...
Java数据库连接池的原理与应用 在Java开发领域,数据库连接池(Database Connection Pool,简称DBCP)是一种提高数据库访问性能、降低资源消耗的重要技术。它通过预先建立一定数量的数据库连接,存储在一个“池”中...
### JAVA 使用数据库连接池连接Oracle数据库全代码解析 #### 一、概述 本文将详细介绍如何在Java项目中使用Apache DBCP(Database Connection Pool)来连接Oracle数据库,并提供完整的示例代码。通过这种方式,我们...
Java数据库连接池C3P0是一种常用的开源数据库连接管理工具,它通过提供连接池服务,提高了应用程序处理数据库连接的效率,降低了系统资源的消耗。在Java应用中,尤其是在服务器端,数据库连接的创建和关闭是相对耗时...
数据库连接池是Java应用程序中非常重要的一个组件,它在提高应用性能、节省系统资源方面起着关键作用。本文将深入探讨如何使用Java手写数据库连接池,并基于maven进行项目构建。我们将分析四个核心类的功能,以及...
Java数据库连接池驱动是Java应用程序在访问数据库时用于优化资源管理的一种技术。它提供了一种在多个数据库操作之间重用数据库连接的方式,从而避免了频繁创建和关闭连接带来的性能开销。连接池的核心思想是池化资源...