我有一台SLES机器,它将CLOSE_WAIT状态下的TCP连接积累起来,看起来是永远的。这些描述符最终占用了所有可用的内存。目前,我已经得到了3037个,但在最近匆忙重新启动之前,它要高得多。
有趣的是,它们不是来自本地端口的连接,我希望这些端口具有侦听过程。它们没有关联的PID,它们的计时器似乎已经过期。
# netstat -ton | grep CLOSE_WAIT
tcp 176 0 10.0.0.60:54882 10.0.0.12:31663 CLOSE_WAIT off (0.00/0/0)
tcp 54 0 10.0.0.60:60957 10.0.0.12:4503 CLOSE_WAIT off (0.00/0/0)
tcp 89 0 10.0.0.60:50959 10.0.0.12:3518 CLOSE_WAIT off (0.00/0/0)
# netstat -tonp | grep CLOSE_WAIT
tcp 89 0 10.0.0.59:45598 10.0.0.12:1998 CLOSE_WAIT -
tcp 15 0 10.0.0.59:60861 10.0.0.12:1938 CLOSE_WAIT -
tcp 5 0 10.0.0.59:56173 10.0.0.12:1700 CLOSE_WAIT - 对于TCP堆栈或内核网络,我不是黑手,但根据手册页,TCP配置似乎是正常的,因为这些值是默认的:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200那是怎么回事?如果计时器过期了,堆栈不应该自动清除这些东西吗?随着这些事情的发展,我实际上是在给自己一个长期的DoS。
发布于 2011-03-26 02:20:43
不,CLOSE_WAIT没有超时时间。我认为这就是off在您的输出中的含义。
要退出CLOSE_WAIT,应用程序必须显式关闭套接字(或退出)。
见如何打破关闭_等。
如果netstat在process列中显示-:
https://unix.stackexchange.com/questions/10106
复制相似问题