性能测试过程中优化-2:
由于上次三八女神秒杀活动宕机,马上又来一轮秒杀活动,所以这次要做好准备。
- 由于压测大批量数据,没有做分布式,所以把华为云压力机由8核16G 扩展到了 60核120G。
- jmeter内存由原来的“: "${HEAP:="-Xms4g -Xmx12g -XX:MaxMetaspaceSize=4096m"}" 调整到了“: "${HEAP:="-Xms30g -Xmx90g -XX:MaxMetaspaceSize=16384m"}"”; jmeter内存通常占物理内存的一半
问题1:
经过上面的设置后,承压数据相应的提升了,但也没有2秒发送2000个请求就会有很多的超时,阿里云监控性能没有任何提升,也看不错误日志,后来经排查是服务器的防火墙拦截了(同一IP大量的请求,从而拦截了其中一部分)
解决办法:云维把华为云的压力机IP设置成了白名单,从而请求成功
问题2:
加压5秒发送4000个线程(每个线程2个请求),持续加压60秒,从而把服务器压夸,大量的业务接口响应出现了504,包含运营后台及支付接口
解决办法:立即中断压测脚本,经运维排查是Nigx被压夸,从而Nigx扩容到了16个;从而可以2S发送5W个请求持续60S,错误率0.07% 95%及平均响应时间都在400毫秒内
问题3:订单确认页面;2秒钟结算3000单(每个线程包含5个接口请求) 持续加压60秒 。 接口/order/settlement 平均响应时间10秒,95%用户响应时间14秒 还有报错; 问题定位 Mysql一个存储过程(生成单号)占用了资源,导致reborn-sys服务假死了解决方法:准备将分批预生成单号存入redis,从而接口直接在redis里取新单号
问题4:支付订单调用微信支付接口报错(2秒种调2500次支付接口),经查微信接口禁止压测 如下解决方法:放弃压测支付;秒杀一般不压测支付,因为是在时间范围内支付即可。
问题5:专题页面 2秒发送11000个用户(每个用户3个接口) 持续加压60秒。结果报如下错误:Non HTTP response code: java.net.NoRouteToHostException/Non HTTP response message: Cannot assign requested address (Address not available)解决方法:https://blog.csdn.net/zhangzhen02/article/details/105550515,从此该数量级压测通过
问题6:专题页面 2秒发送11000个用户(每个用户3个接口) 持续加压60秒。结果报如下错误:Non HTTP response code: javax.net.ssl.SSLHandshakeException/Non HTTP response message: Remote host terminated the handshake
解决方法:jmeter脚本里取样器的请求 KeepAlive去掉勾选即可
最终结果:2秒种发送30000个用户访问(每个线程3个接口),持续加压60秒。95%用户响应时间在1.5秒。错误率为0