为什么 Windows 上的 netstat 显示超过 24 小时的连接?

为什么 Windows 上的 netstat 显示超过 24 小时的连接?

我收到与服务器端口耗尽相关的错误(“通常只允许使用每个套接字地址(协议/网络地址/端口)一次”)。

因此,我用 netstat -n 检查,它列出了大约 84000 个连接。

根据本地端口以及外部 IP 地址是我自己的事实,我可以看到其中 3654 个与运行在同一台服务器上的程序有关,而我在 24 小时前(实际上是昨天早上)就关闭了该程序。它们都处于 TIME_WAIT 状态,位于 49165 和 65533 之间的外部端口上。至少有一些相同的外部端口号也显示为本地端口,例如:

TCP    <my_ip>:14046  <my_ip>:49165  TIME_WAIT
...
TCP    <my_ip>:49165  <other_ip>:80  TIME_WAIT

14046 是我服务器上的一个程序监听的端口,我昨天终止的程序曾经反复连接到该端口。host <other_ip>在 时给了我一些信息compute-1.amazonaws.com,但我不认识 IP。我无法从浏览器中获取任何信息。因此,我无法弄清楚该机器上的什么会连接到 上的端口 80,但最近在同一台机器上运行了各种使用 Web 服务的东西,所以我猜这可能是其中一个的重定向或类似的东西。

间隔超过 4 分钟的 netstat 单独运行表明两个连接都保留在列表中。

这是预料之中的吗?我以为套接字应该在 4 分钟左右后最终关闭,但 netstat 通常会列出它们更长时间吗?这些端口真的被占用了吗?如果是,我可以做些什么来释放它们?最好不要重启,但如果必须的话,那我就不得不这么做。

操作系统是 Windows Server Enterprise,在 Rackspace VM 上运行。

[编辑:嗯,我应该在 serverfault 上询问这个问题吗?]

[另一项修改:重启似乎可以解决问题。所有旧连接都消失了,并且相同类型的新连接也如预期的那样在几分钟内消失。因此我猜网络堆栈不知何故进入了故障状态。]

答案1

请看一下微软的以下文章:避免 TCP/IP 端口耗尽

其中一条建议是检查注册表设置中 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下的 TcpTimedWaitDelay 项。该条目控制“连接关闭时保持 TIME_WAIT 状态的时间长度”。也许你得到的值很长……默认值是 240 秒。

此外,您可能需要检查是否可以跟踪并查看哪些进程导致 TIME_WAIT 连接,并查看其中是否有配置设置可以更快地关闭端口。

相关内容