运行lsof -i在CLOSE_WAIT中显示了很多连接? 我应该担心

所以我正在运行lsof -i | wc -l lsof -i | wc -l周期性地告诉我,在240和255之间的420行处于CLOSE_WAIT状态。 TCP连接如何进入这种状态?

我应该担心,我应该如何排除故障?

(我正在编辑mikegrb的回答,但是我决定把它扔得太多了)

CLOSE_WAIT的含义与它所说的完全相同 – 内核正在等待本地进程在删除条目之前closures它的文件描述符。 TCP连接已经被彻底拆除,远端可能是连接是finito的印象,但是你的最后是坚持的东西。

唯一值得关注的是大量的CLOSE_WAIT条目消耗了内核内存和文件描述符表项,如果有大堆的话,这可能是一个问题。 如果您正在查看的条目是暂时的,那么可能只是通过很多 TCP连接进行循环,而在连接closures之间的less量时间内,您会看到其中的一小部分该进程将会closures文件描述符。 另一方面,如果它们是永久性的(端口和IP地址不会随着时间的推移而改变),那么某些东西在泄漏描述符,并且需要固定,以便在它们结束时总是closures它。 正如mikegrb所说的,一个较新的版本可能已经解决了这个问题,所以在相关的邮件列表或检查更新日志上的问题可能是有保证的。

CLOSE_WAIT状态表示另一端发送一个FIN段来closures连接。 这种联系还是有的。 它处于一种可以认为是半双工模式的模式,允许在这种模式下刷新任何缓冲区,并将最后一位数据发送到最后,请求在closures连接之前closures连接。

如果在CLOSE_WAIT中有很多连接,则意味着负责的进程在进入CLOSE_WAIT后不会closures套接字。 您可以使用tcpdump或其他networkingstream量捕获工具来查看数据包。

还要看看负责的stream程。 出于好奇,责任过程是什么? 它可能有一个更新的固定版本可用,或者是时候提交错误报告;)

如果您在弱networking中运行,您可能会调整:

  • 文件描述符的最大数量通过ulimits和通过/proc (系统范围)
  • 您可以通过/proc缩短TCP等待时间

您可能没有closures服务器上运行的应用程序中的资源(文件句柄,networking连接)。