Tengo una hipótesis: a veces las conexiones TCP llegan más rápido que mi servidor accept()
. Hacen cola hasta que la cola se desborda y luego hay problemas.
¿Cómo puedo confirmar que esto está sucediendo?
¿Puedo monitorear la longitud de la cola de aceptación o el número de desbordamientos? ¿Hay un mostrador expuesto en alguna parte?
netstat
solo muestra las longitudes de la cola de envío y recepción, que no es lo mismo que la cola de aceptación.
man netstat | less +/Flags
netstat
, no parece mostrarse Flags
en absoluto para las conexiones TCP. A partir de una pequeña prueba, parece que las conexiones se muestran como ESTABLISHED
en netstat
, incluso si trato de abrir conexiones a un proceso que lo hace listen()
pero nunca accept()
.
SYN_RECV
embargo, para TCP podría contar . No hay otra cola más allá de eso. Supongo que se le puede decir al kernel de alguna manera que registre los paquetes descartados debido a demasiadas conexiones entreabiertas, pero han pasado más de 10 años desde que examiné las redes con Linux, así que no tengo idea de cómo hacerlo. En una nota al margen: no está esperando accept()
que haga su trabajo, está esperando ACK
que lleguen s de los hosts de conexión para completar las conexiones.
netstat
.