微信号:grzlwx

介绍:光荣之路官方资讯

tomcat 500并发压力测试实战分析

2015-06-16 23:34 光荣之路


struts2+hibernate3.2+spring2.5+tomcat6.18+proxool9.1+mysql.5.1.37 +win2003
hibernate没有做任何优化,就是默认的让srping2.5来管理事务的.

做了一个注册登录的项目.这个项目是从第三方传用户数据和验证签名过来,我必须要判断用户过来以后,数据没有被修改,并且数据库里没有数据,才可以注册.
因为要用到大压力并发,所以做了很多压力测试,现在和大家分享一下.


在首先,我们并不有马上做数据库访问,注册等方面的压力测试,而是先准备把静态页面压力测试到1000以上.
也就是把Tomcat配置好,让它能处理这么大的并发页面.
具体可以见我下面的文章:
hi.baidu.com/%CD%F5%D7%D36%BA%C5/blog/item/ff0f9724ff375f21d4074237.html

并发压力测试到1000,很快就到了.具体配置在文章里有写到.

接下来,就是做注册登录页面了.具体的流程是这样的.


在第一次是用的proxool数据连接池.
在100的并发的时候,是很勉强的过去了.
We are already in the process of making 6 connections and the number of simultaneous 这个问题出现了.点击链接可以看到解决问题和方法.

提升到200的时候,就出现问题了.压力曲线很难看.
首先是这个问题,每次打开的连接数太小.更改了,还是提升不上去.主要问题卡在数据库.
数据库拿不到更大的连接数,前端页面就卡在数据库这里,全部卡死了.
基本上一个下午的反复配置,实际上都是无用功了.

于是项目组决定,更改连接方式.打断连接的最大问题,数据和前端页面的等待连接.让失败的数据快速返回失败,不要卡死后面的连接数据.不能卡死服务器.

于是在紧张的2天时间里,把ssh框架给引入进来了.让spring管理struts2的actioin类.也让spring解决hibernate的事 务.在配置struts2+hibernate3.2+spring2.5+tomcat6.18+proxool9.1+mysql.5.1.37里, 我吃尽了苦头,深深的理解了,这些框架没有根本了解带来的一些歪路.对于这些配置,我会再开一贴说明.因为网上关于这几个加起来的配置文章,大多是相互抄 的,没有根本的配置起来.或者说配置起来,不可用,老报错等.

改完了以后,做100的测试,基本上速度是相当的快.完全没有到测试的上限.
当然,这里也有很多好笑的.
比如我们当时开通了两台服务器,一台是测试的,一台是运行的.在同一个机房.可是网速好像起不来....
因为注册\登录\到首页的话, 这个首页就是2M的大小.100个并发,那可是200M的下载量.不可忽略网速的问题和硬盘的io问题.

在做100以上的时候,基本上就把js\css\图片给取消了,只做 注册\登录\到静态的首页.这个时间我们的测试服务器上的loadruner出了问题.测试人员说得重装. - -!汗过一个.我们没有那么多时间等.
于是到生产机上安装了loadruner就运行起来.虽然这样会影响真实的测试数据,不过更可以忽略网络一块的因素,来评估程序的稳定性了.

本机上,先挂300测试,很快就出现了
We are already in the process of making 6 connections and the number of simultaneous
这个错误,我开到100的,结果还是报 要101个链接.
再改大的时候,就出现 Communications link failure Last packet sent to the server was 0 ms ago.这个错误了.
网上很多都是说连接地址从localhost改成127.0.0.1就好了,我看了一下我的链接,没有错,没有问题....
也有的说是tomcat等待时间太长 wait_timeout 这个默认是8小时,过了就关闭了.可是我的是tomcat刚打开,没有这个道理的.
再分析,应该不是这问题 .
把mysql的最大链接数开大到600.再把proxool的最大链接数开到了500.还留100给其他的程序. - -!

再测试.....还是没有通过,发现很多错误都是不能打开数据库连接了.通过mysql admin查看,发现数据库的连接数量根本就没有上去.说明,不是数据库链接数问题.
再想想,是不是可能出现连接开始的时候,打开太小了,所以在测试的时候,数据库打开消耗时间.在并发的情况下,还要分内存和cpu去处理tomcat事务,这样响应不过来..于是把proxool的最小连接数开到300 proxool.minimum-connection-count="300" ,把proxool.prototype-count="50" 数据活跃数改到50
再开300的测试.通过,没有问题.

但是,不可能一开始就把数据库连接开到300吧.认真分析一下hibernate的原理.是有数据缓存的.而我每一次都是重启tomcat,再来测试,相 当于把hibernate的数据缓存给清掉了.根本就没有体现出hibernate的优势,在这里反而在注册查询的时候,降低了整个系统的性能.

于是,把proxool最小链接数再下调到100.从100个并发测试.好的,没有问题.
再调试到200并发.错了6个,还可以接受.
再调试到300并发.错了10个,还是可以接受.
再调试到400并发,没有错误.
再调试到500并发,没有错误...
看看数据连接数,也上来了.

问题就是出现在这里.
如果你的网站,一上来,并发量就很大的话,那你一定要把最小链接数和保持数据链接活跃数加大.
保证在瞬时的并发时,你的服务器可以处理过来.
如果你的网站访问量是慢慢起来的话,那这两个的初始值都可以设置小一点.

给出大家数据库的配置. 这个配置是放在 tomcat/conf/context.xml下的.通过jndi来调用的.至于为什么要用tomcat来管理.在关于s2 s2.5 h3.2 里会分析.

Java代码

  1. <Resource name="jdbc/mysql"

  2. auth="Container"

  3. type="javax.sql.DataSource"

  4. factory="org.logicalcobwebs.proxool.ProxoolDataSource"

  5. proxool.alias="DBPool"

  6. user="root"

  7. password="root"

  8. delegateProperties="foo=bar"

  9. proxool.jndi-name="mysqljndi"

  10. proxool.driver-url="jdbc:mysql://127.0.0.1:3306/webgame?characterEncoding=utf-8"

  11. proxool.driver-class="com.mysql.jdbc.Driver"

  12. proxool.house-keeping-sleep-time="40000"

  13. proxool.house-keeping-test-sql="SELECT ''"

  14. proxool.maximum-connection-count="500"

  15. proxool.minimum-connection-count="100"

  16. proxool.maximum-connection-lifetime="18000000"

  17. proxool.simultaneous-build-throttle="100"

  18. proxool.recently-started-threshold="40000"

  19. proxool.overload-without-refusal-lifetime="50000"

  20. proxool.maximum-active-time="60000"

  21. proxool.verbose="true"

  22. proxool.trace="true"

  23. proxool.fatal-sql-exception="Fatal error"

  24. proxool.prototype-count="50"

  25. proxool.statistics-log-level="DEBUG"

  26. />

大家有什么建议的,欢迎拍砖.

(作者:wangzi6hao 来源:http://wangzi6hao.iteye.com/blog/531582)

光荣之路软件测试培训

官网:http://www.gloryroad.cn/

微信公众号:gloryroadtrain

性能测试QQ群:415987441
软件测试招聘QQ群: 203715128
自动化3群QQ: 371211499



 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 史上最贱设计出炉,贱到没朋友! 冬至 —— 你咋过的? TFS 10周年生日快乐 – 布莱恩大叔的故事 慕课网@你,一大波IT好书推荐! Web测试方法(流程)