一、 问题发现
-
在公司服务端到上发现上万的TIME_WAIT链接。
-
而在Nginx的服务器上也发现了类似的大量TIME_WAIT。也就是与Nginx服务器主动断开了与客户端的链接。
-
问题产生的主要原因
服务器产生大量TIME_WAIT的原因,猜测是其主动断开链接的次数太多,需要在TIME_WAIT状态等待2ML的时间。所以猜测问题是Nginx服务器到公司服务端的链接是短连接。据了解,用Nginx做负载均衡时,转发到公司服务端的链接协议默认是Http1.0,在http1.0中发送Connection: close首部,所以当服务端完成请求是会立马断开此链接,链接经过4次挥手之后就进入TIME_WAIT状态等待2ML。而在Nginx上大量的TIME_WAIT猜测是Nginx本身的配置问题,因为客户端是期望建立长连接的,也就是发送Keep-Alive首部,加上策略。 -
产生的影响
当请求的数量很多时,在2ML这个时间段会产生大量的TIME_WAIT链接,大量的TIME_WAIT对性有一定的影响,但是最主要的是,TIME_WAIT标志着我们建立的连接是短连接。对于大量持续的请求来到时,如果每个新的请求到来都要建立新的链接的话,会增加建立链接的开销,这种情况下建立长连接显得尤为重要。
二、解决问题
- 修改Nginx的配置
这里的配置有可以分为两个部分:
① 客户端到Nginx服务器。http{ #配置keep-alive连接超时的时间 keepalive_timeout 1000s; #keep-alive连接上可以服务的请求的最大数量 keepalive_requests 1000; }