jmeter性能测试java.net.SocketTimeoutException: connect timed out,Read timed out
java.net.SocketTimeoutException: connect timed out,Read timed out原因分析
本人jmter API接口压测过程中,出现 java.net.SocketTimeoutException: Read timed out 报错
具体排查过程:
1. 首先排查jmeter到服务器的网络没有问题
2. 因发起的压力测试时F5负载无权限查看,所以把API调用地址的负载均衡设置成了NGINiX继续查看,发现nginx报499错误.
当时没明白499错误的原因,没有及时发现问题,查各种问题,499对应的是 “client has closed connection”,表示客户端主动关闭连接,
(注:后来发现不是客户端主动关闭的原因,客户端主动端口请求连接时,NGINX 不会将该请求代理给上游服务,这个时候 access log 中会以 499 记录这个请求。)
3. 上面说看到499误以为是客户端的问题,那么就开始排查jmter
1)查看jmeter脚本设置的超时时间,已经设置到60s了,继续调大超时时间到100s仍然没卵用,
2)排查jmeter java内存,发现java没存已经设置了5G,和内存没啥关系
4. 用同样之前可以发送成功的报文,进行运行仍然报错
5. 进行改接口下游接口进行压测时,可以发起压测成功,那么此时就考虑是这个接口的问题,要不是改接口的负载均衡有问题,要不是负载均衡下的服务器主机有问题n
因压测系统是F5负载均衡我们无权限不方便查看,而且切换成NGINX负载均衡仍然有问题,大致排查是负载均衡的问题呢,那么下一步排查负载均衡对应的主机问题
6. 查询该API接口负载均衡下的各个服务器主机情况,查看当前应用的LOG日志已经不打印,确认是是当前主机被挂起了。后重启主机后OK(后面排查出主机被挂起是因为数据库有锁冲突的原因)
总结: 本人当前遇到的这个问题,不是jmeter自身的问题,而是服务器自身响应不过来相应的请求,需排查下游服务器的进行是否被挂起。