我有一台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。
哦,我的研究表明,其他人正在'lsof -i'中看到这样的工件。我没有看到什么奇怪那里。
—
pboin 2011年
尝试
—
BillThor
sudo netstat -tonp
查看正在使用哪个程序。
该帖子和我的答案stackoverflow.com/a/17697733/540323将有所帮助。
—
Amil Waduwawara