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师都喜欢写代码.可是不喜欢 ...
随机推荐
- zeng studio的项目窗口PHP Explorer
恢复zeng studio的项目窗口PHP Explorer方法: Windows>show view >PHP Explorer
- MongoDB中mapReduce的使用
MongoDB中mapReduce的使用 制作人:全心全意 mapReduce的功能和group by的功能类似,但比group by处理的数据量更大 使用示例: var map = function ...
- 一个IT工薪族的4年奋斗成果
关于标题:为了方便传播,使用了"最简化"的一段. 过段时间,考虑改为"大学毕业4年-回顾和总结(11):一个IT工薪族的4年奋斗成果(2012年6月17日~2016年6 ...
- 有趣的鼠标悬浮模糊效果总结---(filter,渐变文字)
绘制渐变背景图 第一种:大神的想法,摘抄 background-image: -webkit-linear-gradient(left, blue, red 25%, blue 50%, red 75 ...
- JavaWeb 项目,更改本地文件需刷新才有效问题 (tomcat相关)
问题 如果JavaWeb项目需要读取实时更新的本地文件内容,可能遇到必须在更新后手动refresh才能有效的问题. 原因 这是由于项目实际上是运行在Tomcat中,而非本地的工作目录.eclipse可 ...
- Web框架django基础篇
基本配置及学习 路由(Urls).视图(Views).模板(Template).Model(ORM). 简介 Django 是一个由 Python 写成的开放源代码的 Web 应用框架.它最初是被开 ...
- .NET一般处理程序如何获取AJAX传递的参数
POST的话 要用 HttpContext.Request.Form 和 HttpContext.Request.Params[""] GET对应HttpContext.Req ...
- springboot 集成日志 yml配置
原文:https://www.cnblogs.com/bigben0123/p/7895696.html
- iText输出中文的三种字体选择方式
1.使用iTextAsian.jar中的字体 BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",Bas ...
- js获取上传的文件名称
<input name="file_" type="file" id="file_" size="100" /&g ...