服务器出现大量TIME_WAIT 、CLOSE_WAIT状态的原因有哪些

服务器出现大量TIME_WAIT状态主要是由于HTTP非长连接、长连接超时和请求数量上限导致的。而CLOSE_WAIT状态则是因为服务端程序未及时关闭连接。HTTP的非持久连接会频繁触发四次挥手,占用服务器资源。HTTP长连接的超时和请求数限制也会迫使服务器关闭连接,产生TIME_WAIT。当服务端的close函数调用延迟,将导致CLOSE_WAIT状态积累。
摘要由CSDN通过智能技术生成

一、服务器出现大量TIME_WAIT 状态的原因

首先我们先说一下什么是TIME_WAIT 状态,它是TCP四次挥手的第四次挥手主动关闭方的状态。

原因有三点:

1:HTTP 没有使用长连接

HTTP没有使用长连接,就意味着服务器主动关闭的时候,每个都要进行四次挥手,而服务器端口那么多,连接资源那么多,就会造成大量TIME_WAIT状态出现。


2:HTTP 长连接超时

HTTP长连接是有超时时间的,超过这个时间,服务器就会主动关闭。

假设设置了 HTTP 长连接的超时时间是 60 秒,nginx 就会启动一个「定时器」,如果客户端在完后一个 HTTP 请求后,在 60 秒内都没有再发起新的请求,定时器的时间一到,nginx 就会触发回调函数来关闭该连接,那么此时服务端上就会出现 TIME_WAIT 状态的连接。


3:HTTP 长连接的请求数量达到上限

当长连接的请求数量达到上限,服务器就会才去措施主动关闭一些连接。

比如对于一些 QPS 比较高的场景,比如超过 10000 QPS,甚至达到 30000 , 50000 甚至更高,如果 keepalive_requests 参数值是 100,这时候就 nginx 就会很频繁地关闭连接,那么此时服务端上就会出大量的 TIME_WAIT 状态。

简单提一下服务器出现大量CLOSE_WAIT 状态的原因

首先我们先说一下什么是CLOSE_WAIT 状态,它是TCP四次挥手的第二次挥手被动关闭方的状态。

当服务端出现大量 CLOSE_WAIT 状态的连接的时候,说明服务端的程序没有调用 close 函数关闭连接。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃代码的航航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值