我一直试图弄清楚生产网络服务器(Windows Server 2012)上的套接字耗尽。我有一个PowerShell脚本,它使用Get-NetTCPConnection来记录正在使用的tcp端口。
脚本输出我们的进程显示大量套接字,其远程地址为0.0.0.0:0,状态为" Bound"。也没有绑定到此地址的代码。插座尖峰大多在午夜开始,凌晨4点达到峰值,并在早上6点恢复正常。峰值远程地址为0.0.0.0:0的平均套接字数为1500,这太高了。
目前没有正在运行的计划进程,而且负载非常小。
我是在寻找错误的地方,还是我需要使用不同的工具?也许它首先不是插座耗尽问题?我不知道。
我正在处理的c#异常消息让我相信这是:
无法执行套接字上的操作,因为系统缺少足够的缓冲区空间或者队列已满;
答案 0 :(得分:0)
保留0.0.0.0 IP地址以指定本地计算机上的所有IP地址。即使您可能将它们作为外部地址读取,但这只是套接字连接另一端的名称 - 仍然可以是本地IP地址。
现在,为什么0.0.0.0而不是127.0.0.1?关键是本地计算机可以分配多个IP地址。建立侦听套接字时,它可以指定它正在侦听此计算机上任何 IP地址上的传入连接。因此,您看到的连接是在计算机上使用此类侦听套接字建立的连接。
出于诊断目的,我使用的是CurrPorts实用程序,它可以告诉我有关套接字连接的不同信息,包括持有连接的进程。您可以在地址https://www.nirsoft.net/utils/cports.html
找到它