我正在调查 Windows Server 2016 上的网络问题。
大约每周一次,所有出站端口都用完了,这意味着各种网络组件不再正常工作。如果发生这种情况,您将在 Windows 事件日志中找到以下警告:
TCP / IP 警告:4231“由于所有此类端口都在使用中,从全局 TCP 端口空间分配临时端口号的请求失败”。
TCP/IP 警告:4227 “TCP/IP 未能建立传出连接,因为所选的本地端点最近被用于连接到同一个远程端点。此错误通常发生在传出连接以高速率打开和关闭时,导致所有可用的本地端口,并强制 TCP/IP 将本地端口重新用于传出连接。为了最大限度地降低数据损坏的风险,TCP/IP 标准要求从给定本地端点到连续连接之间的最短时间间隔给定的远程端点“。
对我来说,这看起来像是一个典型的句柄/套接字泄漏,我试图用“netstat -anobq”找到可以分配连接的进程。
这是处于等待状态的连接的一个非常短的列表:
...
TCP 192.168.24.40:49814 192.168.24.40:49661 WAIT 0
TCP 192.168.24.40:49833 192.168.24.10:5432 WAIT 0
TCP 192.168.24.40:49880 192.168.24.40:49670 WAIT 0
TCP 192.168.24.40:50167 192.168.24.40:49661 WAIT 0
TCP 192.168.24.40:50185 192.168.24.10:5432 WAIT 0
TCP 192.168.24.40:50236 192.168.24.40:49670 WAIT 0
TCP 192.168.24.40:50713 192.168.24.40:49661 WAIT 0
TCP 192.168.24.40:50718 192.168.24.10:5432 WAIT 0
TCP 192.168.24.40:50725 192.168.24.40:49670 WAIT 0
TCP 192.168.24.40:50798 192.168.24.40:49661 WAIT 0
TCP 192.168.24.40:50837 192.168.24.10:5432 WAIT 0
TCP 192.168.24.40:50887 192.168.24.40:49670 WAIT 0
TCP 192.168.24.40:51308 192.168.24.40:49661 WAIT 0
TCP 192.168.24.40:51336 192.168.24.10:5432 WAIT 0
TCP 192.168.24.40:51360 192.168.24.40:49661 WAIT 0
TCP 192.168.24.40:51380 192.168.24.10:5432 WAIT 0
TCP 192.168.24.40:51427 192.168.24.40:49670 WAIT 0
TCP 192.168.24.40:51487 192.168.24.40:49670 WAIT 0
[Explorer.exe]
WAIT 状态下有一个巨大的连接列表(> 1000)。在此示例中,该进程似乎是 explorer.exe,但如果我在几分钟后运行相同的命令,则打开的进程是不同的。我捕获了 Firefox.exe、SSHd、Windows Telemetry Service 和许多其他具有大量等待连接的进程。
第二个奇怪的是,这些连接中有 90% 指向 192.168.24.10:5432。Postgres DB 在此服务器上的 5432 上运行。但 FireFox、Explorer.exe 和其他 10 多个进程不访问该数据库。
看起来 netstat 是错误的,连接属于另一个进程。这甚至可能吗?
Windows Defender 正在此服务器上运行,另外我使用 Panda Antivirus 进行了扫描。服务器似乎很干净。
我可以降低等待超时以提前关闭它们或增加传出连接的数量(目前约为 16000)。但我认为这只会将问题解决几天。
你们对接下来的检查有什么建议吗?