背景
公司的产品一直使用的是DBCP作为连接池。但是最近在客户环境发现当并发增加时,宕机鸟。已经对数据库查询进行了优化,但是还是会发生Tomcat宕机的情况,想到更换数据库连接池。
But换或者不换都要有数据佐证喽。因此着手测试对比。
测试环境
应用服务器 | Tomcat 5.5 |
测试工具 | JMete 2.8 |
数据库 | Oracle 11g |
DBCP & Proxool
测试场景:系统登录(一次登录操作需要>14次的数据库连接操作)
测试结果(20秒内模拟50个进程循环3次)
DBCP
sampler_label | aggregate_report_count | average | aggregate_report_median | aggregate_report_90%_line | aggregate_report_min | aggregate_report_max | aggregate_report_rate | aggregate_report_bandwidth |
login:HTTP请求 | 150 | 6906 | 6262 | 13137 | 461 | 16022 | 3.071505 | 1.643735 |
总体 | 150 | 6906 | 6262 | 13137 | 461 | 16022 | 3.071505 | 1.643735 |
proxool
sampler_label | aggregate_report_count | average | aggregate_report_median | aggregate_report_90%_line | aggregate_report_min | aggregate_report_max | aggregate_report_rate | aggregate_report_bandwidth |
login:HTTP请求 | 150 | 2959 | 3165 | 4620 | 8 | 5522 | 4.797083 | 5.380354 |
总体 | 150 | 2959 | 3165 | 4620 | 8 | 5522 | 4.797083 | 5.380354 |
结论
1. 从以上测试结果看,proxool的性能明显优于DBCP。
2. 另外针对Tomcat 5.5和Tomcat 6.0也做了测试,发现Tomcat不同版本间的差异并不大,因此决定暂时不更换应用服务器。
下一步
利用jrockit分析系统内存泄露情况,进行改进。