DBCP,C3P0,Tomcat_JDBC 性能及稳定性測试
原创文章,转载请指明出处:http://aub.iteye.com/blog/1404219, 尊重他人即尊重自己
DBCP,C3P0,Tomcat_JDBC 性能及稳定性測试
1.測试环境:
硬件环境:
数据库server:2U*8核 8G内存
測试server: 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)的时间,而是连接池“获取连接然后立即关闭连接”的时间。
測试结果:
平均消耗时间是每一个用例測试了5次计算出来的
DB POOL | 线程数量 |
单线程 运行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 10 | 1000 | 251 | 0.0251 |
C3P0 | 10 | 1000 | 802.8 | 0.08028 |
TomcatJDBC | 10 | 1000 | 191.8 | 0.01918 |
DB POOL | 线程数量 |
单线程 运行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 100 | 1000 | 810.4 | 0.008104 |
C3P0 | 100 | 1000 | 2248.8 | 0.022488 |
TomcatJDBC | 100 | 1000 | 726 | 0.00726 |
DB POOL | 线程数量 |
单线程 运行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 150 | 1000 | 1854.4 | 0.012363 |
C3P0 | 150 | 1000 | 2990.8 | 0.019939 |
TomcatJDBC | 150 | 1000 | 861 | 0.00574 |
DB POOL | 线程数量 |
单线程 运行次数 |
平均消耗 时间(ms) |
平均单条 时间(ms) |
DBCP | 300 | 1000 | 3851.8 | 0.012839 |
C3P0 | 300 | 1000 | 6233.2 | 0.020777 |
TomcatJDBC | 300 | 1000 | 3403.8 | 0.011346 |
结论:
整体性能:TomcatJDBC > DBCP > C3P0
网上好多资料都说C3P0的性能要好于DBCP,从我的測试结果来看并非这样,或许是我的配置有不对的地方,
測试时最大的活动线程配置为100。
并发为150线程时,TomcatJDBC的优势明显,
也就是当并发超过连接池最大的活动线程数,但并没有超过太多的情况下,TomcatJDBC的优势明显,
当并发数为300时。3种连接池性能差距不大。
出现这样的情况,说明连接池的最大活动线程数已经不满足现有系统需求,须要调整配置了
我測试的结果都是毫秒级,
对于一个小型的系统,并发压力不大时,选择哪个连接池都没有太大区别,考虑很多其它的应该是连接池的稳定性。
3.稳定性測试: (測试代码见附件)
測试点:
1.当数据库因为未知原因关闭,又一次启动后,连接池能否够自己主动重连。无需重新启动应用服务。
2.应用服务正常,数据库服务正常,可是网络环境异常,导致连接中断。此时连接池中连接处于“半连接”状态,
现象:
在不重新启动应用服务的情况下。 mysql数据库进行重新启动操作,mysql全然重新启动后。运行程序。
TomcatJDBC和DBCP并没有自己主动重连,反复运行查询语句,会一直报异常。重新启动应用服务后恢复正常
C3P0进行了自己主动重连,反复运行查询语句,运行正常。
结论:
默认配置条件下,TomcatJDBC和DBCP并没有自己主动重连机制,查看官方文档。这缺陷能够通过改动配置解决。
另:
连接池重连机制,有2种:
1.同步验证方式:
每次获取连接或关闭连接时,运行一个提前定义的验证语句(sql语句)。
验证连接池中的连接是否有效,假设验证失败,彻底关闭此连接,
这样的方式会导致每次运行数据库操作时都有额外的开销。对性能影响较大。
2.心跳验证方式:
每隔特定的时间进行一次验证。运行一个提前定义的验证语句(sql语句),
验证连接池中的连接是否有效,假设验证失败,彻底关闭此连接,
能够依据详细情况,适当的调节验证间隔时间。
这样的方式以牺牲较小的性能开销为代价。来保持系统的稳定性。
4.心得
自从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性能要求较高时。能够不进行验证。
5.測试代码见附件:
类:TestPerformance,性能測试
类:TestStability。稳定性測试,定时运行查询语句,
类:TestWacthPool,自己主动重连測试,简单观察连接池内部状态
如有有疑问能够加我QQ: 35443224 请说明您是ITEYE 社区的朋友, ^_^
原创文章,转载请指明出处:http://aub.iteye.com/blog/1404219, 尊重他人即尊重自己
DBCP,C3P0,Tomcat_JDBC 性能及稳定性測试的更多相关文章
- DBCP,C3P0,Tomcat_JDBC 性能及稳定性测试
1.测试环境: 硬件环境: 数据库服务器:2U*8核 8G内存 测试服务器: 2U*8核 6G内存 软件环境: jdk: 1.6.29 mysql: 5.0.77 mysql_driver: my ...
- Redis源代码分析(十三)--- redis-benchmark性能測试
今天讲的这个是用来给redis数据库做性能測试的,说到性能測试,感觉这必定是高大上的操作了.redis性能測试.測的究竟是哪方面的性能,怎样測试,通过什么指标反映此次測试的性能好坏呢.以下我通过源代码 ...
- android 性能測试iozone篇
一:简单介绍 iozone是一个文件系统的benchmark工具, 用于測试不同的操作系统中文件系统的读写性能, 能够測试下面13种模式 0=write/rewrite 1=read/re-read ...
- 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践
这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...
- iOS自己主动化測试的那些干货
前言 假设有測试大佬发现内容不正确.欢迎指正,我会及时改动. 大多数的iOS App(没有持续集成)迭代流程是这种 也就是说.測试是公布之前的最后一道关卡.假设bug不能在測试中发现,那么bug 就会 ...
- LINPACK測试
1简单介绍 LINPACK是线性系统软件包(Linear system package) 的缩写. Linpack如今在国际上已经成为最流行的用于測试高性能计算机系统浮点性能的benchmark.通过 ...
- 【金阳光測试】大话Android自己主动化測试--Android自己主动化系列(1)--金阳光于2013年4月份
Android自己主动化測试框架和工具在四年多的发展日趋成熟. 从五年前的第一代自己主动化架构演进到眼下第四代(本系列讲座第7篇后将具体剖析第三代和第四代自己主动化框架)从曾经最早谷歌推崇的monke ...
- .Net站点架构设计(八)測试
.Net站点架构时间(八)測试 一般而言.总体測试策略是:先针对部分系统进行性能及压力測试,得到各部分的峰值处理性能:再模拟总体流程測试,此时倒不用依照峰值跑,重点測试总体业务流程及业务预期负荷. 在 ...
- 随想录(做自己代码的測试project师)
[ 声明:版权全部.欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] 非常多project师都有一个不好的习惯,由于大多数itproject师都喜欢写代码.可是不喜欢 ...
随机推荐
- zay大爷的神仙题目 D1T3-膜你抄
依旧是外链 锦鲤抄 [题目背景] 你在尘世中辗转了千百年 却只让我看你最后一眼 火光描摹容颜燃尽了时间 别留我一人,孑然一身 凋零在梦境里面. ——银临&云の泣<锦鲤抄> [问题描 ...
- EZOJ 宝石迷阵 建图+网络流匹配
题面: 封印恶魔的地方可以看作是一个 n*m 的矩形,包含了 n*m 个祭坛,并且其 中有一些祭坛已经损坏了. 如果 i+j 为偶数,那么第 i 行第 j 列的祭坛只要没有损坏,就一定会封印有一个恶魔 ...
- 第二次:Ubuntu16.04 系统怎么截图
一开始想着写文章不用图,全靠文字描述,可是我错了,技术类文字没有图怎么能说的清楚,于是乎开始找在Ubuntu系统下的截图工具,网络神奇,发现了这个,以下命令可以反复试试: ubuntu 会自带一款截图 ...
- django+uwsgi+nginx部署(非常详细)
django+uwsgi+nginx部署 1.介绍: 在网上看了很多教程,但自己部署了很久都没有成功,这篇博文记录自己所踩过得坑. 2.环境: Ubuntu 16.04.1 LTS (GNU/Linu ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【ZOJ - 3780】 Paint the Grid Again (拓扑排序)
Leo has a grid with N × N cells. He wants to paint each cell with a specific color (either black or ...
- 九度oj 题目1190:大整数排序
题目1190:大整数排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4142 解决:1867 题目描述: 对N个长度最长可达到1000的数进行排序. 输入: 输入第一行为一个整数N,( ...
- MySQL prepare语句的SQL语法
MySQL prepare语法: PREPARE statement_name FROM preparable_SQL_statement; /*定义*/ EXECUTE statement_name ...
- 【转】Java中的IO操作
在使用io操作之前,先看一下java中的文件类File如何使用.File包括文件和目录,对文件和目录的操作是新建目录mkdir,新建文件createNewFile,删除文件和目录delete,以及其他 ...
- 状态压缩DP总结
POJ1185 炮兵部队问题: 在平原上才能放置炮兵,每个炮兵的上下左右2格之内都不能出现别的炮兵 可以考虑在当前行放置炮兵它的右侧和下侧绝对不会出现炮兵即可,左侧和上侧就能省去考虑 明显的状态压缩d ...