1、在压测过程中报错:连接超时(ConnectTimeout)
产生原因:
1)、可能是压测工具本身有连接超时设置引起
a)、如在Jmeter http请求 页面,advanced 页签, 有 timeout 设置,可以对发送请求和返回请求进行超时设置,如把 connect 和 response 端都设置为 30 000 (30s);
b)、如在Jmeter 的 jmeter.properties 中:httpclient4.idletimeout = 30000 (延迟 30 s,一般设置为 10 - 60 s )
2、可能是服务端存在连接超时问题
a)、先分析一下压测接口的数据链路
b)、根据链路来一步步分析每层可能出现的连接超时情况,如Nginx,mq,redis,微服务,数据库每个层面都会可能出现连接超时的情况
2、在压测过程中报错:连接被拒绝( Connection refused)
1)、首先检查网络和服务器状态,排除物理连接问题
2)、高并发时有些接口会有限流操作,还有的请求在介入层Nginx就可以进行限流(nginx_http_limit_conn_Module),然后请求连接就被拒绝了
3)、有些中间件如 Tomcat,有最大等待数设置,如 accept-count 值。acceptCount是能够接受的最大等待数,当等待队列被放满了,这时当再来新的请求时就会被 Tomcat 拒绝。
4)、对于数据库,如mysql,mongoDB等有个最大连接数,如果请求超过最大连接数,也会拒绝请求。
3、在压测过程中报错:连接被重置(Connection reset)
1)、笔者在压测实战中,有遇到过连接被重置的情况,后面发现是因为压测网络的域名出现了问题,找运维解决好后就好了。
2)、可能是服务端和客户端的连接方式不一样,需要同时使用相同的连接方式如长连接或短连接。
3)、HTTPS协议,可能存在TLS版本不一致情况,把服务端和客户端使用相同的TSL版本。
4、在压测过程中报错:Socket closed
1)、原因分析:Linux 服务端的连接数默认为1024,设置小了,对于高并发时,明显不够
修改 三个参数 vim /etc/sysctl.conf
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
修改后 sysctl -p
5、在windows下用 Jmeter 做压力测试时,报错:java.net.BindException: Address already in use: connect。
原因:windows提供给TCP/IP链接的端口为 1024-5000,并且要四分钟来循环回收它们,就导致我们在短时间内跑大量的请求时将端口占满了,导致如上报错。
解决办法(在jmeter所在服务器操作):
1)、cmd中输入regedit命令打开注册表;
2)、在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters右键Parameters;
3)、添加一个新的DWORD,名字为MaxUserPort;
4)、然后双击MaxUserPort,输入数值数据为65534,基数选择十进制;
5)、完成以上操作,务必重启机器,配置才能生效。