设为首页 收藏本站
查看: 2548|回复: 0

[经验分享] tomcat 500并发压力测试过程

[复制链接]

尚未签到

发表于 2017-1-30 12:26:05 | 显示全部楼层 |阅读模式
  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,很快就到了.具体配置在文章里有写到.


接下来,就是做注册登录页面了.具体的流程是这样的.
http://hiphotos.baidu.com/%CD%F5%D7%D36%BA%C5/pic/item/bd414f09dc7ce8add1581b8f.jpg


在第一次是用的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 里会分析.

<Resource name="jdbc/mysql"
auth="Container"     
type="javax.sql.DataSource"
factory="org.logicalcobwebs.proxool.ProxoolDataSource"     
proxool.alias="DBPool"     
user="root"   
password="root"     
delegateProperties="foo=bar"
proxool.jndi-name="mysqljndi"   
proxool.driver-url="jdbc:mysql://127.0.0.1:3306/webgame?characterEncoding=utf-8"     
proxool.driver-class="com.mysql.jdbc.Driver"
proxool.house-keeping-sleep-time="40000"
proxool.house-keeping-test-sql="SELECT ''"
proxool.maximum-connection-count="500"
proxool.minimum-connection-count="100"
proxool.maximum-connection-lifetime="18000000"
proxool.simultaneous-build-throttle="100"
proxool.recently-started-threshold="40000"
proxool.overload-without-refusal-lifetime="50000"
proxool.maximum-active-time="60000"
proxool.verbose="true"
proxool.trace="true"
proxool.fatal-sql-exception="Fatal error"
proxool.prototype-count="50"
proxool.statistics-log-level="DEBUG"
/>
  大家有什么建议的,欢迎拍砖.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-335327-1-1.html 上篇帖子: Tomcat and Hibernate and cat 配置 下篇帖子: 《How Tomcat Works》翻译(5)之 日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表