暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

阿里云ECS大量TIME_WAIT解决方案

Linux运维技术之路 2020-03-07
766



 一 、故障原因:

  服务器突然出现大量time_wait(因为大量连接资源被占用后不释放的话,会导致网站正常访问不能响应)。如何应对?


我这边先检查了监控和服务器当前的状态(time_wait连接确实异常):


  • 监控


  • 登录服务器检查



二、排查思路

1、猜测是否,是因为程序打开大量文件句柄,没有关闭导致。(问了研发同事,排查过后没有这种情况)

2、调大当前文件句柄 

3、调优sysctl.conf文件

4、检查nginx连接情况


三、解决方法:

1、操作系统文件句柄之前已经调整过。

echo "ulimit -SHn 66536" >>/etc/rc.local


2、调优/etc/sysctl.conf

    net.ipv4.tcp_syncookies = 1  
    net.ipv4.tcp_tw_reuse=1 #让TIME_WAIT状态可以重用,这样即使TIME_WAIT占满了所有端口,也不会拒绝新的请求造成障碍 默认是0
    net.ipv4.tcp_tw_recycle=1 #让TIME_WAIT尽快回收 默认0
    net.ipv4.tcp_fin_timeout=30


    sysctl -p

    3、调整nginx 配置文件(最优方法)

      upstream http_backend {
      server 127.0.0.1:8080;
      keepalive 16;
      }
      server {
      ...
      location /http/ {
      proxy_pass http://http_backend;
      proxy_http_version 1.1;
      proxy_set_header Connection "";
      ...
      }
      }


      总结:由于nginx 在反向代理http协议的时候,默认采用的http1.0.

      HTTP1.0的特点:不支持长连接(http keep-alive).CLOSE通知后端服务器主动关闭连接。会导致任何一个客户端的请求都在后端服务器上产生了一个TIME-WAIT状态连接

      HTTP1.1的特点:支持长连接。

      关键配置参数:keep-alive 16;  proxy_http_vesion 1.1;  proxy_set_header Connection "";



      爱运维^_^爱分享



      文章转载自Linux运维技术之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论