近期做了一次论坛网站性能测试,记录下来以便总结提高,欢迎大家交流分享,若有不妥之处还请指教;
需求分析
性能要求
1、服务在3000并发基础上,关键服务响应时间小于等于300ms
2、系统支持快速扩容,支持更大的并发Session,例如并发Session从2000到4000,扩容后关键页面访问、关键服务响应时间增长幅度低于5%
性能指标
经过分析,我们认为要求中的3000绝对并发,跟jmeter中的并发数不同,要求中应该是指的3000用户同时操作,对应到我们jmeter压测过程中,说的是tps 达到3000;
用户要求并发用户要求响应时间
预估线程数
(jmeter并发数)
3000并发--每秒3000请求300ms--1秒请求3次 1000
所以测试时应关注的指标为:TPS 3000时,服务响应时间 小于等于300ms
环境准备
略
测试工具
apache-jmeter-5.1.1
测试过程
单接口
1、首先利用阶梯压测,找到并发数和TPS的拐点;初步得到我们压测时,应该给多少并发数;
阶梯压测后,我们决定并发数最大为 500
2、单接口场景下,分别给单接口100、200、250 、500并发数;
如下所示,200加到250 直到500,tps并没有跟着上涨,但是响应时间却上涨很快;
所以得到最优情况为:**并发数 200,tps 1023.5**
并发数TPS平均响应时间90%响应时间95%响应时间****异常率(%)********执行时长(s)CPU内存100893.6/s111146162030085.26%69.28%31.00%79.79%2001023.5/s146288378030095.10%70.01%35.97%79.31%2501043.1/s238367712030095.49%68.88%37.04%79.35%5001062.2/s46212251474030096.06%68.81%39.21%79.45%
3、此时观察cpu和内存,cpu达到了90%以上,所以我们决定扩容后再次测试;
4、对性能环境扩容4倍后,我们再次用阶梯压测,得到最大并发数还是给到500;
5、把所有的接口,分别给100、200、500并发,根据结果来分析最优情况;
最优情况:**并发数 500,TPS 2313.8 **
并计算出**扩容4倍后,提升率为126%,**继续扩容应该可以满足性能要求
*并发数TPS平均响应时间90%响应时间95%响应时间***异常率(%)****执行时长(s)CPU内存**1001124.987101127030026.11%34.70%34.65%75.74%22.43%47.03%39.48%91.49%2001729.2114133148030038.93%34.75%53.57%76.23%30.17%47.26%59.09%88.36%5002313.82132391123030049.08%35.23%67.36%76.51%42.09%47.43%75.74%89.16%
混合接口
跟单接口测试方法一样
扩容前得到最优情况为:并发数 200, tps 170
扩容后得到最优情况为:并发数 500, tps 437.2
性能问题及优化
1、执行十几秒后,TPS断崖式下降,响应时间增大,CPU使用率下降 ----因为数据库只有只读模式导致报错,数据都堵塞在master;
2、nmc监控,发现存在慢sql,----对相关慢sql进行整改;
踩坑过程
在持续压测15分钟后,tps会迅速上升,错误率随之迅速上升,刚开始以为是运行一段时间之后,都走缓存,所以tps会有明显的上升趋势,后来排查发现,15分钟后,获取的token过期了,导致后面的接口全部没有正常调用;
检查断言,发现断言200是不行的,因为没有正常调用的接口也会返回200,改了断言之后,重新压测,tps不会再陡增。
版权归原作者 oh-pinpin 所有, 如有侵权,请联系我们删除。