记一次网关服务性能测试中遇到的几个问题
目录
1. 背景
对网关服务nginx进行并发测试,分别使用了JMeter和nGrinder工具进行测试。在测试过程中遇到工具本身、参数配置等问题。
2. 工具
JMeter v5.2.1
Kong
nginx
nGrinder-3.4.3
3. 问题
1)JMeter:请求响应中出现类似提示:socket closed。
原因:在JMeter中发送HTTP请求时,缺省选择 HttpClient4 实现。在并发量较大时,可能出现连接数过大导致请求关闭的情况。
解决:
在HTTP请求-》Advanced-》Client implementation中,选择Implementation为Java。
2)JMeter:并发量稍微大一些(约超过50线程数)时,JMeter的控制台中出现类似报错:java.lang.OutOfMemoryError: Java heap space。
原因:由于并发数,监控或者日志记录的原因,导致JMeter内存消耗较大
解决:
打开jmeter.bat文件,修改参数。这里参数大小要根据所在物理机内存进行设置,不能超过物理机内存的一半。
默认:HEAP="-Xms512m -Xmx512m"
修改:HEAP="-Xms1024m -Xmx1024m"
也可以参考:https://www.cnblogs.com/hd-test/p/12176579.html
3)改用nGrinder进行测试。并发数较大后,日志中出现报错:ERROR Connection establishment timed out。
原因:并发数并未达到nGrinder单机上限,这里是由于Kong以及nginx的超时参数配置导致。
解决:
- nGrinder脚本中修改超时参数:
- 修改Kong的超时参数。60ms(缺省)-》999ms
- 修改nginx的超时参数:在nginx.conf中修改.
proxy_connect_timeout 999;
proxy_read_timeout 999;
proxy_send_timeout 999;
4)客户端日志报错:ERROR Premature EOF encountered。响应信息被截取
原因:服务端性能瓶颈。通过扩展服务器实例未再出现该问题。但后面发现,并发数达到一定大小后,无论如何扩展实例,服务端的TPS都变化不大,网卡带宽已被沾满(性能瓶颈)。
4. 参考资料
https://blog.csdn.net/qq_24699007/article/details/83892511 -- nginx中的超时参数设置
https://blog.csdn.net/basicworld/article/details/100693547 -- nginx中出现响应被截断的原因和解决方法
推荐阅读