- 浏览: 3557975 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (1491)
- Hibernate (28)
- spring (37)
- struts2 (19)
- jsp (12)
- servlet (2)
- mysql (24)
- tomcat (3)
- weblogic (1)
- ajax (36)
- jquery (47)
- html (43)
- JS (32)
- ibatis (0)
- DWR (3)
- EXTJS (43)
- Linux (15)
- Maven (3)
- python (8)
- 其他 (8)
- JAVASE (6)
- java javase string (0)
- JAVA 语法 (3)
- juddiv3 (15)
- Mule (1)
- jquery easyui (2)
- mule esb (1)
- java (644)
- log4j (4)
- weka (12)
- android (257)
- web services (4)
- PHP (1)
- 算法 (18)
- 数据结构 算法 (7)
- 数据挖掘 (4)
- 期刊 (6)
- 面试 (5)
- C++ (1)
- 论文 (10)
- 工作 (1)
- 数据结构 (6)
- JAVA配置 (1)
- JAVA垃圾回收 (2)
- SVM (13)
- web st (1)
- jvm (7)
- weka libsvm (1)
- weka屈伟 (1)
- job (2)
- 排序 算法 面试 (3)
- spss (2)
- 搜索引擎 (6)
- java 爬虫 (6)
- 分布式 (1)
- data ming (1)
- eclipse (6)
- 正则表达式 (1)
- 分词器 (2)
- 张孝祥 (1)
- solr (3)
- nutch (1)
- 爬虫 (4)
- lucene (3)
- 狗日的腾讯 (1)
- 我的收藏网址 (13)
- 网络 (1)
- java 数据结构 (22)
- ACM (7)
- jboss (0)
- 大纸 (10)
- maven2 (0)
- elipse (0)
- SVN使用 (2)
- office (1)
- .net (14)
- extjs4 (2)
- zhaopin (0)
- C (2)
- spring mvc (5)
- JPA (9)
- iphone (3)
- css (3)
- 前端框架 (2)
- jui (1)
- dwz (1)
- joomla (1)
- im (1)
- web (2)
- 1 (0)
- 移动UI (1)
- java (1)
- jsoup (1)
- 管理模板 (2)
- javajava (1)
- kali (7)
- 单片机 (1)
- 嵌入式 (1)
- mybatis (2)
- layui (7)
- asp (12)
- asp.net (1)
- sql (1)
- c# (4)
- andorid (1)
- 地价 (1)
- yihuo (1)
- oracle (1)
最新评论
-
endual:
https://blog.csdn.net/chenxbxh2 ...
IE6 bug -
ice86rain:
你好,ES跑起来了吗?我的在tomcat启动时卡在这里Hibe ...
ES架构技术介绍 -
TopLongMan:
...
java public ,protect,friendly,private的方法权限(转) -
贝塔ZQ:
java实现操作word中的表格内容,用插件实现的话,可以试试 ...
java 读取 doc poi读取word中的表格(转) -
ysj570440569:
Maven多模块spring + springMVC + JP ...
Spring+SpringMVC+JPA
DBCP,C3P0,Tomcat_JDBC 性能及稳定性测试
1.测试环境:
硬件环境:
数据库服务器:2U*8核 8G内存
测试服务器: 2U*8核 6G内存
软件环境:
jdk:
1.6.29
mysql:
5.0.77
mysql_driver:
mysql-connector-java-5.0.8-bin.jar
DBCP:
commons-dbcp-1.4.jar
下载地址: http://commons.apache.org/dbcp/
commons-pool-1.5.6.jar
下载地址: http://commons.apache.org/pool/
C3P0:
c3p0-0.9.1.2.jar
下载地址: http://www.mchange.com/projects/c3p0/index.html
log4j-1.2.8.jar(c3p0需要添加此包)
下载地址: http://logging.apache.org/log4j/
Tomcat_JDBC:
tomcat-jdbc.jar
下载地址: https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
或者在tomcat安装根目录下的lib目录中直接拿来用之
tomcat-juli.jar
下载地址:(没找到)
在tomcat安装根目录下的bin目录中直接拿来用之
配置信息:
数据库连接超时时间设置为: 10年
数据库支持最大连接数设置为:2000
初始化连接池大小:10
连接至最小活动线程数:10
连接池最大活动线程数:100
其他配置均保持各个连接池的默认配置
2.性能测试:
测试点:
在多线程多任务的条件下,各个连接池获取连接然后马上关闭连接,比较所消耗的时间。
在网上看了好多关于数据库连接池方面的测试,
大多数测试过程中,包括了执行sql语句部分,即,创建连接,执行sql语句,关闭连接,
一开始我也是这样测试,
测试过过程中,发现数据很不稳定, 这几个连接池都是忽快忽慢,
经过思考、分析,个人 觉得这样是不准确的,执行sql语句时,测试已经不是数据库连接池的性能了,
完全是数据库驱动程序(例如mysql_driver )和数据库本身的性能,
数据库连接池负责的仅仅是建立DataSource,获取(从连接池中获取)Connection,关闭(放回到连接池)Connection,
因此,
我在测试时,没有计算初始化连接池(建立DataSource)的时间,而是连接池“获取连接然后马上关闭连接”的时间。
测试结果:
DB POOL | 线程 数量 |
单线程 执行次数 |
消耗时间 (ms) |
开始时间 (ms) |
结束时间 (ms) |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 10 | 1000 | 251 | 1328863445815.00 | 1328863446066.00 | 251 | 0.0251 |
252 | 1328863466569.00 | 1328863466821.00 | |||||
251 | 1328863477174.00 | 1328863477425.00 | |||||
254 | 1328863487555.00 | 1328863487809.00 | |||||
247 | 1328863499474.00 | 1328863499721.00 | |||||
C3P0 | 10 | 1000 | 781 | 1328863372064.00 | 1328863372845.00 | 802.8 | 0.08028 |
789 | 1328863385489.00 | 1328863386278.00 | |||||
879 | 1328863401335.00 | 1328863402214.00 | |||||
773 | 1328863413608.00 | 1328863414381.00 | |||||
792 | 1328863424693.00 | 1328863425485.00 | |||||
TomcatJDBC | 10 | 1000 | 191 | 1328863272642.00 | 1328863272833.00 | 191.8 | 0.01918 |
197 | 1328863303126.00 | 1328863303323.00 | |||||
187 | 1328863313262.00 | 1328863313449.00 | |||||
195 | 1328863324253.00 | 1328863324448.00 | |||||
189 | 1328863334700.00 | 1328863334889.00 |
DB POOL | 线程 数量 |
单线程 执行次数 |
消耗时间 (ms) |
开始时间 (ms) |
结束时间 (ms) |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 100 | 1000 | 786 | 1328862922748.00 | 1328862923534.00 | 810.4 | 0.008104 |
853 | 1328862939832.00 | 1328862940685.00 | |||||
810 | 1328862955354.00 | 1328862956164.00 | |||||
807 | 1328862981344.00 | 1328862982151.00 | |||||
796 | 1328862994825.00 | 1328862995621.00 | |||||
C3P0 | 100 | 1000 | 2517 | 1328863021884.00 | 1328863024401.00 | 2248.8 | 0.022488 |
2340 | 1328863040949.00 | 1328863043289.00 | |||||
1968 | 1328863075044.00 | 1328863077012.00 | |||||
2256 | 1328863092216.00 | 1328863094472.00 | |||||
2163 | 1328863114138.00 | 1328863116301.00 | |||||
TomcatJDBC | 100 | 1000 | 752 | 1328863155803.00 | 1328863156555.00 | 726 | 0.00726 |
725 | 1328863171617.00 | 1328863172342.00 | |||||
694 | 1328863183983.00 | 1328863184677.00 | |||||
703 | 1328863195628.00 | 1328863196331.00 | |||||
756 | 1328863209798.00 | 1328863210554.00 |
DB POOL | 线程 数量 |
单线程 执行次数 |
消耗时间 (ms) |
开始时间 (ms) |
结束时间 (ms) |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 150 | 1000 | 1919 | 1328861533609.00 | 1328861535528.00 | 1854.4 | 0.012363 |
1957 | 1328861551638.00 | 1328861553595.00 | |||||
1869 | 1328861746964.00 | 1328861748833.00 | |||||
1916 | 1328861791533.00 | 1328861793449.00 | |||||
1611 | 1328861832003.00 | 1328861833614.00 | |||||
C3P0 | 150 | 1000 | 2726 | 1328861869415.00 | 1328861872141.00 | 2990.8 | 0.019939 |
2570 | 1328861895349.00 | 1328861897919.00 | |||||
3342 | 1328861912351.00 | 1328861915693.00 | |||||
3218 | 1328861929664.00 | 1328861932882.00 | |||||
3098 | 1328861950163.00 | 1328861953261.00 | |||||
TomcatJDBC | 150 | 1000 | 877 | 1328861974599.00 | 1328861975476.00 | 861 | 0.00574 |
821 | 1328861990969.00 | 1328861991790.00 | |||||
890 | 1328862016507.00 | 1328862017397.00 | |||||
857 | 1328862037077.00 | 1328862037934.00 | |||||
860 | 1328862052490.00 | 1328862053350.00 |
DB POOL | 线程 数量 |
单线程 执行次数 |
消耗时间 (ms) |
开始时间 (ms) |
结束时间 (ms) |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 300 | 1000 | 3908 | 1328862516139.00 | 1328862520047.00 | 3851.8 | 0.012839 |
3850 | 1328862408362.00 | 1328862412212.00 | |||||
3939 | 1328862440877.00 | 1328862444816.00 | |||||
3806 | 1328862469116.00 | 1328862472922.00 | |||||
3756 | 1328862495883.00 | 1328862499639.00 | |||||
C3P0 | 300 | 1000 | 6111 | 1328862711585.00 | 1328862717696.00 | 6233.2 | 0.020777 |
5162 | 1328862618669.00 | 1328862623831.00 | |||||
6261 | 1328862638870.00 | 1328862645131.00 | |||||
6832 | 1328862659598.00 | 1328862666430.00 | |||||
6800 | 1328862681808.00 | 1328862688608.00 | |||||
TomcatJDBC | 300 | 1000 | 3458 | 1328862152316.00 | 1328862155774.00 | 3403.8 | 0.011346 |
3376 | 1328862308211.00 | 1328862311587.00 | |||||
3397 | 1328862227685.00 | 1328862231082.00 | |||||
3342 | 1328862261681.00 | 1328862265023.00 | |||||
3446 | 1328862358400.00 | 1328862361846.00 |
结论:
总体性能:TomcatJDBC > DBCP > C3P0
网上好多资料都说C3P0的性能要好于DBCP,从我的测试结果来看并不是这样,也许是我的配置有不正确的地方,
测试时最大的活动线程配置为100,并发为150线程时,TomcatJDBC的优势明显,
也就是当并发超过连接池最大的活动线程数,但并没有超过太多的情况下,TomcatJDBC的优势明显,
我测试的结果都是毫秒级,
对于一个小型的系统,并发压力不大时,选择哪个连接池都没有太大差别,考虑更多的应该是连接池的稳定性。
3.稳定性测试:
测试点:
1.当数据库由于未知原因关闭,重新启动后,连接池是否可以自动重连,无需重启应用服务。
2.应用服务正常,数据库服务正常,但是网络环境异常,导致连接中断,此时连接池中连接处于“半连接”状态,
现象:
在不重启应用服务的情况下, mysql数据库进行重启操作,mysql完全重启后,执行程序,
TomcatJDBC和DBCP并没有自动重连,重复执行查询语句,会一直报异常,重启应用服务后恢复正常
C3P0进行了自动重连,重复执行查询语句,执行正常。
结论:
默认配置条件下,TomcatJDBC和DBCP并没有自动重连机制,查看官方文档,这缺陷可以通过修改配置解决。
另:
连接池重连机制,有2种:
1.同步验证方式:
每次获取连接或关闭连接时,执行一个预定义的验证语句(sql语句),
验证连接池中的连接是否有效,如果验证失败,彻底关闭此连接,
这种方式会导致每次执行数据库操作时都有额外的开销,对性能影响较大。
2.心跳验证方式:
每隔特定的时间进行一次验证,执行一个预定义的验证语句(sql语句),
验证连接池中的连接是否有效,如果验证失败,彻底关闭此连接,
可以根据具体情况,适当的调节验证间隔时间。
这种方式以牺牲较小的性能开销为代价,来保持系统的稳定性。
4.心得(非endual心得,转载来的)
自从tomcat7发布以来,网络上开始出现一个新的连接池的影子,tomcat jdbc,
经过测试,发现tomcat jdbc的性能果然不错,是连接池不二的选择,
本人E文水平有限,没办法把E文翻译的那么优雅,
tomcat jdbc的其他优点,还请看它的官网介绍
https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html
这篇文章详细介绍阐述dbcp与c3p0的一些不足:
Why another connection pool project
重连机制:
不推荐使用同步验证方式,
如果系统架构中,网络环境(应用服务与数据库服务之间)不稳定,硬件环境不稳定,推荐使用心跳验证方式。
如果系统架构中,网络环境和硬件环境都机器稳定,而且对数据库I/O性能要求较高时,可以不进行验证。
发表评论
-
snmp
2020-04-13 11:07 428https://www.iteye.com/blog/zhan ... -
snmp
2020-04-10 21:33 566https://blog.csdn.net/qq_333141 ... -
服务器监控软件
2019-12-31 11:07 513[ERROR] org.hyperic.sigar.Sigar ... -
多数据源
2019-12-23 22:09 455https://gitee.com/baomidou/dyna ... -
mybatis多数据源
2019-12-23 18:09 449https://blog.csdn.net/qq_288042 ... -
springboot ueditor
2019-12-17 18:26 381https://blog.csdn.net/u01216982 ... -
java支持多数据源
2019-12-13 15:59 456spxcms是否支持多数据源 ... -
java日志
2019-12-10 12:01 297https://blog.csdn.net/peng_wei_ ... -
spring 多数据源
2019-12-06 09:55 432https://www.jb51.net/article/10 ... -
idea
2019-12-04 17:13 411https://blog.csdn.net/dengachao ... -
手机大屏
2019-11-30 16:02 349http://demo.demohuo.top/modals/ ... -
quarz配置
2019-11-08 11:48 462https://blog.csdn.net/BryantLmm ... -
mysql同步
2019-11-06 12:20 352https://blog.csdn.net/baidu_418 ... -
nginx配置多个服务
2019-11-04 20:35 775https://blog.csdn.net/everljs/a ... -
h5 加壳
2019-11-04 16:05 630https://jingyan.baidu.com/artic ... -
jeui 前端框架
2019-10-22 14:30 1208http://www.jemui.com/demo/ http ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ htt ... -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/ -
jeui 维护
2019-10-22 14:29 2http://www.jemui.com/demo/
相关推荐
本项目提供了对三种常用的Java数据库连接池——DBCP(BasicDataSource)、C3P0和Tomcat JDBC的性能及稳定性测试代码。下面将详细介绍这三个连接池的工作原理、特性以及如何进行性能测试。 1. **DBCP ...
为了更明确怎样开发出高并发程序,本人写了一个测试例子去体验下 C3P0 tomcatJdbc dbcp 他们的并发能力。采用乐观锁控制oracle数据并发访问。测试结果表明在 c3p0 和dbcp 都能执行完4800以下并发线程访问。c3p0 比较...
总结起来,数据库连接池是提高Web应用性能的关键技术,DBCP和c3p0是常用的两个实现,而Tomcat内置的数据源支持则为开发者提供了方便的集成途径。理解和熟练掌握这些知识,有助于构建高效、稳定的Java Web应用。
C3P0与Apache的DBCP、Tomcat的Tomcat-jdbc-pool等其他连接池相比,各有优势。C3P0在连接管理上更为精细,提供了更多的自定义配置选项,但在性能上可能略逊于某些现代连接池,如HikariCP。选择哪一种取决于具体的...
### DBCP与C3P0连接池配置详解 #### 一、DBCP与C3P0概述 在Java开发中,数据库连接池是提高应用性能的重要手段之一。通过复用预分配好的数据库连接资源,避免了频繁创建和销毁数据库连接所带来的性能开销。Apache ...
DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池。C3P0访问数据库技术,方便快捷,牵扯到的jar包可去网上下载!
c3p0提供了对JDBC数据库连接的池化管理,其主要功能包括: 1. **连接初始化**:c3p0允许配置初始连接数量,确保应用启动时就有一定数量的连接可供使用。 2. **连接获取与释放**:应用可以通过连接池获取和归还连接...
它简单易用,但相比于C3P0和Druid,DBCP的性能和稳定性稍弱。尽管如此,由于其开源和轻量级的特性,DBCP仍被广泛应用于小型项目中。 5. Proxool: Proxool是一个轻量级的JDBC连接池,它的特点是支持多租户,即在一...
在JavaEE应用开发中,数据源(DataSource)是管理和连接数据库的关键...在实际项目中,可以根据需求进行配置调整,以达到最佳的性能和稳定性。同时,了解和掌握数据源的使用,对于理解和优化JavaEE应用的性能至关重要。
本文主要探讨了三个常用的数据库连接池:DBCP、c3p0和Druid,以及它们的配置说明。 1. **DBCP(Apache Commons DBCP)** DBCP是Apache Commons项目的一部分,它依赖于Apache Commons Pool对象池机制来管理数据库...
8. **其他连接池选择**: 虽然c3p0是一个流行的选择,但还有其他的连接池实现,比如Apache的DBCP、Tomcat的Tomcat-jdbc-pool等。每个都有其特点和适用场景,开发者可以根据项目需求选择合适的连接池。 总结,...
**c3p0数据库连接池详解** ...理解并掌握c3p0的配置和使用,对于优化数据库访问性能,提升系统稳定性具有重要意义。在实际应用中,需要根据具体场景进行细致的配置和持续的监控,以确保连接池的最佳运行状态。
本篇文章将详细讲解标题中提到的五种主流Java数据库连接池:C3P0、DBCP、Proxool、Druid以及tomcat-jdbc,并逐一分析它们的特点、使用方法以及优缺点。 1. **C3P0** C3P0是一个开源的JDBC连接池,它实现了数据源和...
4. **事务支持**:c3p0支持JDBC事务管理,可以在连接池中配置事务隔离级别,为应用程序提供更灵活的事务处理能力。 5. **性能优化**:c3p0提供了一些高级特性,如延迟加载(LazilyInitializingDataSource)和并发...
7. **性能优化**:c3p0提供了一些高级特性,如预热连接(pre-test connections)、空闲连接测试(idle test)和连接池分割(pool partitioning),以提升性能和可靠性。 8. **连接池的监控**:c3p0 提供了JMX(Java...
C3P0与DBCP、Tomcat JDBC Pool等其他连接池相比,有自己的特点和优势。C3P0在连接管理上更为精细,提供了更多的性能调优参数,如连接测试策略、连接超时控制等。但不同的连接池在不同场景下性能表现可能有所差异,...
除了`e3p0`,还有其他著名的数据库连接池实现,如`C3P0`、`HikariCP`和`Apache DBCP2`等。它们各有特点,开发者可以根据项目的具体需求选择合适的连接池实现。 总的来说,`JDBC数据库连接池`是Java开发中不可或缺的...
然而,对于大型企业级应用,可能更倾向于使用HikariCP或Apache Tomcat JDBC Pool,因为它们在性能上通常优于C3P0。 6. **C3P0常见问题及解决方案**: - 连接超时:可通过调整`maxIdleTime`参数解决。 - 连接泄漏...