Así que estoy corriendo lsof -i | wc -l
periódicamente y me dice que de 420 líneas, entre 240 y 255 están en CLOSE_WAIT
estado. ¿Cómo entran las conexiones TCP en este estado?
¿Debería preocuparme y cómo debería solucionarlo?
Así que estoy corriendo lsof -i | wc -l
periódicamente y me dice que de 420 líneas, entre 240 y 255 están en CLOSE_WAIT
estado. ¿Cómo entran las conexiones TCP en este estado?
¿Debería preocuparme y cómo debería solucionarlo?
Respuestas:
(Iba a editar la respuesta de mikegrb, pero decidí que la estaba machacando demasiado)
CLOSE_WAIT significa casi exactamente lo que dice: el núcleo está esperando que el proceso local cierre su descriptor de archivo antes de eliminar la entrada. La conexión TCP se ha interrumpido por completo y el extremo lejano puede tener la impresión de que la conexión es finito, pero su extremo se está quedando atrás.
La única preocupación es que muchas entradas CLOSE_WAIT consumen memoria del núcleo y entradas de la tabla de descriptores de archivos, lo que puede ser un problema si hay grandes cantidades de ellas. Si las entradas que estás viendo son transitorias, entonces es probable que solo estés recorriendo muchode conexiones TCP, y está viendo una pequeña fracción de ellas en el pequeño período de tiempo entre el momento en que se cierra la conexión y el proceso llega a cerrar el descriptor de archivo. Por otro lado, si son permanentes (los puertos y las direcciones IP no cambian con el tiempo), entonces algo está perdiendo descriptores y debe repararse para que siempre cierre sus fds cuando haya terminado con ellos. Como dijo mikegrb, una versión más nueva ya puede haber solucionado el problema, por lo que probablemente se justifique una pregunta en la lista de correo relevante o el examen de los registros de cambios.
El estado CLOSE_WAIT significa que el otro extremo envió un segmento FIN para cerrar la conexión. La conexión todavía está establecida. Está en un modo que podría imaginarse como semidúplex, lo que permite que este extremo elimine cualquier búfer, enviando los últimos bits de datos al final solicitando que se cierre la conexión antes de cerrar la conexión desde este extremo.
Si tiene muchas conexiones en CLOSE_WAIT, significa que el proceso responsable no está cerrando el socket una vez que entra en CLOSE_WAIT. Puede usar tcpdump u otras herramientas de captura de tráfico de red para ver los paquetes.
También eche un vistazo al proceso responsable. Por curiosidad, ¿cuál es el proceso responsable? Puede tener una versión fija más nueva disponible o tal vez es hora de presentar un informe de error;)
Probablemente no esté cerrando un recurso (identificador de archivo, conexión de red) en algún lugar de una aplicación que se ejecuta en el servidor.