Pregunta:
Tengo una máquina SLES que acumula conexiones TCP en un estado CLOSE_WAIT por lo que parece ser una eternidad. Estos descriptores eventualmente absorben toda la memoria disponible. Por el momento, tengo 3037 de ellos, pero era mucho más alto antes de un reinicio rápido recientemente.
Lo interesante es que no son de conexiones a puertos locales que espero que 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 kernel, pero la configuración de 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 borrar automáticamente estas cosas? De hecho, me estoy dando un DoS a largo plazo a medida que se acumulan estas cosas.
Respuesta:
No, no hay tiempo de espera para CLOSE_WAIT
. Creo que eso es lo que significa el off
en su salida.
Para salir de CLOSE_WAIT
, la aplicación tiene que cerrar el socket explícitamente (o salir).
Consulte Cómo romper CLOSE_WAIT .
Si se muestra netstat
-
en la columna de proceso:
- ¿Está ejecutando con los privilegios y capacidades adecuados (por ejemplo, como root)?
- podrían ser procesos del kernel (por ejemplo, nfsd)