首页
首页
文章目录
  1. 简介
  2. 处理方法
    1. 方法一 扩容win允许的链接数
    2. 方法二 缩短win TIME_OUT 关闭时间
  3. 扩展 Linx 出现TIME_WAIT后解决方法

win TCP动态端口占用过多,出现TIME_WAIT过多,导致没有空闲端口建立链接处理方法

简介

今天遇到一个问题,我们有个服务使用的是win+nginx来对服务进行转发(历史原因,未能切换到linux上面),突然间nginx对所有业务都直接返回50x;以下是我的排查思路

1、检查nginx后端服务是否正常
2、检查nginx反向代理的服务是否正常
3、查看nginx error日志确认具体50x接口
4、查看系统端口连接数
5、确认具体进程与服务

基于上面5点,确认为因TIME_OUT的数据连接数过多,超过了win默认允许最多的16384连接数限制,只能

处理方法

一些用到的命令

检查win允许使用的动态链接端口数量

1
netsh int ipv4 show dynamicportrange tcp

查看tcp允许动态链接端口数

查看当前系统tcp下所有tcp占用端口
windows下查看当前所有的tcp连接

1
netstat -ano

windows下查看所有8080端口的tcp连接

1
netstat -ano |findstr "8080"

windows下查看所有的”TIME_WAIT”状态的tcp连接

1
netstat -ano |findstr "TIME_WAIT"

windows下统计time_wait出现的次数(按行统计) /i 忽略大小写(不支持powershell)

1
netstat -ano |find /i /c "TIME_WAIT"

方法一 扩容win允许的链接数

1
netsh int ipv4 set dynamicport tcp start=2000 num=63000

修改动态端口从2000 开始 数量为 63000个

修改tcp允许动态链接端口数

方法二 缩短win TIME_OUT 关闭时间

打开注册表
进入HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters路径
在”编辑”菜单中,选择”新建 > DWORD (32-位)值”,输入名称”TcpTimedWaitDelay”。
右键单击TcpTimedWaitDelay,选择”修改”。
在”编辑 DWORD(32位)值”对话框的”基数”区域中,选择十进制值为”10”,并”确定”。
关闭注册表编辑器。
注:此操作需要重启生效。
修改tcp允许动态链接端口数

扩展 Linx 出现TIME_WAIT后解决方法

查询系统当前链接状态

1
2
3
4
5
6
7
8
[root@Dzer0 ~]# netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}'
LAST_ACK 6
LISTEN 28
ESTABLISHED 263
FIN_WAIT1 2
FIN_WAIT2 22
TIME_WAIT 10
SYN_SENT 6

各种描述

1
2
3
4
5
6
7
8
9
10
11
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉

编辑内核文件/etc/sysctl.conf

1
2
3
4
net.ipv4.tcp_syncookies = 1  # 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 # 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 # 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout =30 # 修改系默认的 TIMEOUT 时间

新增以上内容

1
sysctl -p

使其生效

以上
End!

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫