¿Puedo hacer que la sesión TCP / IP se ejecute en menos de 60 segundos?

8

Nuestro servidor está sobrecargado con sesiones TCP / IP, tenemos 1200 - 1500 de ellas. La mayoría de ellos están suspendidos en el estado TIME_OUT. Resulta que una conexión en estado TIME_OUT ocupa un zócalo hasta que transcurran 60 segundos de tiempo de espera.

El problema es que el servidor no responde y muchos clientes no reciben servicio.

He realizado una prueba simple: descargue un archivo XML del servidor con Internet Explorer 8.0 La descarga finaliza en una fracción de segundo. Pero luego veo que la conexión TCP / IP se cuelga en el estado TIME_OUT durante 60 segundos.

¿Hay alguna forma de deshacerse de TIME_OUT esperando o hacer menos para liberar el socket para nuevas conexiones?

Entiendo por qué la conexión TCP / IP entra en el estado TIME_OUT, pero no entiendo por qué Internet Explorer no cierra la conexión una vez que finaliza la descarga del archivo XML.

Los detalles.

Nuestro servidor ejecuta un servicio web escrito en Perl (mod-perl). El servicio proporciona datos meteorológicos a los clientes. El cliente es una aplicación Flash (en realidad control Flash ActiveX integrado en la aplicación de Windows).

SO: Ubuntu

La opción Apache "Keep Alive" está establecida en 0

par
fuente
Si comprende por qué entra en el estado TIME_OUT, debe comprender por qué esto es necesario para evitar otros ataques y problemas. Puede reducir este tiempo de espera, pero hay otras consecuencias de hacerlo.
davr
La sintaxis es KeepAlive on|off. KeepAlive 0es la sintaxis de Apache 1.1; Supongo que no estás usando eso.
mark4o
La sesión de 1500 T / O no hace que su sistema no responda. Hay otra razón
Poige
¿Las conexiones pasan por un enrutador barato?
LatinSuD

Respuestas:

7

Esta es una configuración en su pila TCP. Como no sabemos en qué plataforma se encuentra, no podemos decir exactamente cómo se llama y cómo cambiarla.

ACTUALIZAR

Entonces estás usando Ubuntu. Puede usar sysctlpara reducir el net.inet.tcp.mslvalor a la mitad de la TIME_WAITduración deseada (en milisegundos, ver man -S 4 tcp), por ejemplo sysctl net.inet.tcp.msl=2500. Tenga cuidado con las implicaciones de hacerlo con respecto a los paquetes errantes que pueden llegar después de que TIME_WAITtranscurre el período.

vladr
fuente
Nuestro servidor ejecuta Ubuntu, he actualizado los detalles
par
«1200 - 1500 de ellos» no grabará ni siquiera la calculadora, por lo que no es la razón para ajustar
msl
1

Supongo que te refieres TIME_WAIT. El par que inicia el cierre activo es el que ingresa TIME_WAIT(consulte el diagrama de transición de estado aquí ), por lo que si puede hacer que su cliente cierre la conexión, lo moverá TIME_WAITal cliente. Consulte esta respuesta para obtener más detalles y un enlace a un buen artículo sobre TIME_WAITproblemas y cómo resolverlos.

Otra alternativa, si no puede hacer que el cliente emita el cierre activo, es restablecer la conexión configurando persistente en falso antes de cerrarlo. Esto hace RSTque se envíe un mensaje en lugar de FIN.

Len Holgate
fuente
Oh muchas gracias! Pero, ¿cómo puedo controlar la conexión TCP / IP cuando el usuario carga un archivo XML con Internet Explorer?
par
TIME_WAITes normal y, a menos que el rendimiento de su servidor se vea afectado, no es algo por lo que me preocupe demasiado. Cuando el zócalo está dentro TIME_WAIT, toma algunos recursos, pero no significa que la conexión aún esté abierta o que el servidor todavía la esté procesando.
Len Holgate el
0

El servidor que no responde probablemente no tiene nada que ver con la cantidad de conexiones en el estado TIME_WAIT. No está claro qué quiere decir con "ocupa un zócalo": el servidor debería tener closeel zócalo en ese momento. El sistema debería poder manejar decenas de miles de conexiones en el estado TIME_WAIT.

David Schwartz
fuente