netstat 显示不存在的进程的 pid 的打开端口?

netstat 显示不存在的进程的 pid 的打开端口?

我们有一个程序,它监听一个端口以接收有关运行报告的信息。关闭并重新打开该程序后,我们收到一条错误消息,提示它使用的端口已被使用。查看netstat,我们发现该端口有 9 个实例处于 CLOSE_WAIT 状态,1 个实例处于监听状态。处于监听状态的实例表示它由 pid 488 拥有。任务管理器显示没有具有该 ID 的进程,并taskkill表示相同。该应用程序是一个内部 .NET 应用程序。

这是一个生产环境,因此我们希望避免重新启动机器。什么原因可能导致此问题?如何解决?

答案1

CLOSE_WAIT 表示套接字已从另一端收到 FIN 数据包,并正在等待拥有该侦听套接字的应用程序将其关闭。未对侦听套接字调用 close() 可能会导致其处于浮动状态,正如它为您所做的那样。

因为它是一个内部的.NET 应用程序,所以我会仔细检查您的源代码,以确保在退出之前正确关闭套接字。

有关套接字状态的更多信息,包括 CLOSE_WAIT: http://blogs.technet.com/b/janelewis/archive/2010/03/09/explaining-close-wait.aspx

相关内容