记一次jmeter接口压测
需求渐缓,测一下服务器接口的tps
配置jmeter
1 下载jmeter
2 修改默认配置文件
打开bin目录下jmeter.properties
# 修改软件默认语言
language=zh_CN
# 修改默认编码,解决请求返回的中文乱码
sampleresult.default.encoding=utf-8
# 修改软件字体大小
jsyntaxtextarea.font.size=25
3 下载图形插件
解压后将lib目录如下
将其全部复制到jmeter的lib目录下
新建测试计划
1 新建测试计划
或快捷键CTRL+L
2 测试计划下添加线程组
3 线程组下添加HTTP信息头管理器
4 继续添加HTTP请求
5 依次添加查看结果树,响应图,TPS图,汇总图
最终测试计划总目录如下
开始测试
被测试环境
1 被测试服务器为阿里云共享内存型,1核,8G, I/O优化
2 被测试服务器有网关nginx(暂时注释掉limit_conn_zone和limit_req_zone配置) + gateway
3 被测试接口为一个查询接口,背后涉及四个表,以及实体的业务逻辑封装,单次查询返回数据514kb
下面开始测试,线程组循环次数都设为10
1 设置线程数100
先从100线程组开始。设置好后,右键线程组,启动。
结果树中,全部请求正常返回
2 设置线程数200
先右键查看结果树,响应图,TPS图,汇总图,点击清除以删除历史数据。然后右键线程组,启动。
结果树依旧全部正常
3 设置线程数300
依旧先清除再启动。
结果树依旧全部正常
4 设置线程数500
依旧先清除再启动。
结果树依旧全部正常
5 线程数600,700的情况和500差不多,略
6 线程数800,终于出现了错误
结果树中应该有几个红色的HTTP请求结果,返回code为502。这里结果太多了,找不到。。。
这里可以看到0.05%的请求失败了。按8000算的话,就是有4个请求失败了。
还有一点,为什么最后统计中样本只有7980,少了20个。这个我也不知道,jmeter跑到后面就不动了,最后我手动停止了线程组,试了几次都这样。如有大佬知道,欢迎评论区告知,谢谢~
总结
- 开始时,随着线程数增加,TPS略上升,服务器还没用力;
- 300线程数时到达顶峰200左右;
- 再继续加码,一段线程数(500~700)内仍然能保证可用性,TPS也只略微下降,180左右;
- 直至800线程数,出现了请求失败的情况,TPS也因此非常低,只有22
除了服务器配置,系统及nginx参数优化,接口响应时间应该是对结果影响更大的。
这里我特意挑了一个逻辑稍微复杂的查询接口,更能测到瓶颈。
下次有空换个简单接口测,看看能不能超过200。目标,先定一个300吧~