2011-01-27 17 views
10

En una implementación típica de servidor de red C, el tamaño de la cola pendiente de aceptación se puede configurar con listen. Cuando una nueva conexión obtiene ingresos y no hay más espacio en la cola, ECONNREFUSED se envía al cliente o la solicitud se ignora.Conozca el tamaño de aceptar la cola de conexiones pendientes en GNU/Linux

¿Hay alguna forma de conocer el estado de esta cola? Es importante porque en un daemon basado en eventos de alta carga, estamos detectando algunos intentos del cliente, y sospechamos que esta cola se llena y los intentos de conexión se ignoran.

Gracias de antemano.

+0

¿El cliente recibe un error ECONNREFUSED? Si es así, tienes tu respuesta. AFAIK no hay manera de saber el tamaño de la cola pendiente. – Simone

+0

No exactamente. El saludo de manos no está terminado correctamente y el servidor entra en reintentos enviando el SYNACK como si se hubiera perdido el último ACK del handshake. Hemos reproducido este comportamiento cuando la cola de aceptar pendiente sale del límite establecido con listen, por lo que esta cola es nuestro sospechoso. –

+0

¿Estás seguro de que aceptas todas las conexiones entrantes? – Simone

Respuesta

8

en Linux: /proc/sys/net/ipv4/tcp_max_syn_backlog:

número máximo de solicitudes de conexión recordadas, que siguen siendo no recibió un reconocimiento de la conexión de cliente.

El valor predeterminado es 1024 para sistemas con más de 128 MB de memoria y 128 para máquinas con poca memoria. Si el servidor sufre una sobrecarga, intente aumentar este número.

/proc/sys/net/core/somaxconn: Límite de socket listen() backlog, conocido en el espacio de usuario como SOMAXCONN. El valor predeterminado es 128. Consulte también tcp_max_syn_backlog para obtener una afinación adicional para los sockets TCP.

estos son los sysctls pertinentes .. en OpenBSD que estoy sentado ahora un sysctl -a rápida revela: net.inet.ip.maxqueue = 300

Cuestiones relacionadas