Tengo una máquina SLES que acumula conexiones TCP en un estado CLOSE_WAIT durante lo que parece ser para siempre. Estos descriptores eventualmente absorben toda la memoria disponible. Por el momento, tengo 3037 de ellos, pero fue mucho mayor antes de un reinicio apresurado recientemente.
Lo interesante es que no provienen de conexiones a puertos locales que espero tengan procesos de escucha. No tienen PID asociados, y sus temporizadores parecen haber expirado.
# 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 -
No soy un cinturón negro cuando se trata de la pila TCP o la red del núcleo, pero la configuración TCP parece sensata, ya que estos valores son predeterminados, según la página del manual:
# cat /proc/sys/net/ipv4/tcp_fin_timeout
60
# cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
Entonces, ¿qué da? Si los temporizadores han expirado, ¿no debería la pila eliminar automáticamente todo esto? Efectivamente, me estoy dando un DoS a largo plazo a medida que estas cosas se acumulan.
sudo netstat -tonp
ver con qué programa está ocurriendo esto.