现象
因为公司需要对系统进行压测,因此使用LR对网站的注册业务进行压力测试,在并发量为7时,出现了以下大量的报错:
分析与解决
首先,解决出现最多的27796报错,在尝试修改注册表中
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters的两个键值:
TcpTimedWaitDelay --- 1;MaxUserPort ---- 65534;将端口等待时间调小,最大可用端口调大,再次运行LR不再报27796错误;
小强点评:
很多朋友遇到错误的时候就懵逼了,完全不知道干啥了,各种十万个为什么。而我一直强调有错误不怕,有100个错误也不怕,我们最简单的原则就是解决那个影响大的。
其次,针对大量的503报错,首先查看了系统报错日志,日志显示为:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure,这时想到小强老师上课讲的,正好和这个类似,于是调整和timeout相关的参数。重启mysql后再次运行场景,还是存在大量503错误,查找系统日志还是报相同的错误。
小强点评:
此类型错误课上讲过,本学员很好的联想到了并尝试解决。知识根本不在乎多少,而在于是否系统化,学很多东西但根本没有建立系统化的结构p用都木有!此处调整后并没有太好的效果。这时候很多朋友又会十万个为什么了,其实大可不必。性能测试好玩的地方就是这样,需要你慢慢的来分析的,一下就搞定还玩个啥
实在木有头绪 , 询问小强老师后,更改了tomcat的配置,在配置文件中增加参数:
minEvictableIdleTimeMillis、numTestsPerEvictionRun、testOnBorrow等并尝试进行调整设置之后
不再报链接失败错误;
小强点评:
很多人碰到多个问题时候就不会分析了,即使会,分析一个之后解决不了就放弃了。凡事都有方法可循,我们太重视技术而忽略了方法和思维,这也是为什么复杂工作只有少数人可以干的原因之一。而这里我也是根据分层思维提供的指导,具体还是本学员理解并解决了,必须点赞!我一直觉得教人不单单是教技术,而更要教做这个事情的方法思维,这才是有价值的。
正当高兴之余,好景不长,一不小心在nginx中看到了这样一个错误:limiting connections by zone "addr", client:..............,这里理解是同一个ip被限制了链接,打开nginx的配置发现里面确实存在着限制参数:limit_conn_zone $limit zone=addr:1m; 这个参数是限制同一IP对系统进行多次请求,但是压力机是一台机子,所以肯定会报错,在压力测试时可以将此处都注释掉,比较重要的一点是,不仅要注释掉这一句配置,需要将server区中和这个配置有关的limit配置都注释掉后重启nginx;
运行LR不再报503的错误;高并发下事物通过率也是百分百。那是我感动的泪水。。。
小强点评:
通过引导学会了利用关键信息进行排查分析,非常赞,并能学一通百,进步很大,再次点赞。很多时候老师是扮演的是一个引导者,并不是万能的神,更多的其实还是靠大家自己的修行才行。
之后还在压测中发现个问题,
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException大概和开发聊了一下,应该是注册业务涉及很多表,表里可能有设置外键,开发排查之后解决掉了,现在基本都非常稳定啦
小强点评:
不耻下问是最脑残的鸡汤,这句鸡汤害了多少人失去了主动思考和解决问题的能力?我想大家都心知肚明。遇到问题要学会自己思考并尝试,之后可以在去探讨带着你的思想。除此之外,现在是团队合作,每个人都有各自的擅长,不会的不要去较真,找会的人帮忙在学习,别太死板。此处学员发现问题并和开发协商之后解决,非常好!擅长协作是每个测试工程师必备的技能也是最重要的!