java.net.SocketTimeoutException: connect timed out,Read timed out缘由分析
本人jmter API接口压测过程当中,出现 java.net.SocketTimeoutException: Read timed out 报错java
具体排查过程:nginx
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仍然没卵用,spa
2)排查jmeter java内存,发现java没存已经设置了5G,和内存没啥关系.net
4. 用一样以前能够发送成功的报文,进行运行仍然报错代理
5. 进行改接口下游接口进行压测时,能够发起压测成功,那么此时就考虑是这个接口的问题,要不是改接口的负载均衡有问题,要不是负载均衡下的服务器主机有问题n
因压测系统是F5负载均衡咱们无权限不方便查看,并且切换成NGINX负载均衡仍然有问题,大体排查是负载均衡的问题呢,那么下一步排查负载均衡对应的主机问题
6. 查询该API接口负载均衡下的各个服务器主机状况,查看当前应用的LOG日志已经不打印,确认是是当前主机被挂起了。后重启主机后OK(后面排查出主机被挂起是由于数据库有锁冲突的缘由)
总结: 本人当前遇到的这个问题,不是jmeter自身的问题,而是服务器自身响应不过来相应的请求,需排查下游服务器的进行是否被挂起。