Pregunta

Nuestra aplicación de servidor está escuchando en un puerto, y después de un período de tiempo ya no acepta conexiones entrantes. (Y aunque me encantaría resolver este problema, no es lo que estoy preguntando aquí)

Lo extraño es que cuando nuestra aplicación deja de aceptar conexiones en el puerto 44044, IIS (en el puerto 8080) también. Al eliminar nuestra aplicación, se soluciona todo: IIS comienza a responder de nuevo.

Entonces, la pregunta es, ¿puede una aplicación desordenar toda la pila TCP / IP? O tal vez, ¿cómo puede una aplicación hacer eso?

Detalle sin sentido: nuestra aplicación está escrita en C #, bajo .Net 2.0, en XP / SP2.

Aclaración: IIS no está " rechazando " Los intentos de conexión. Nunca los está viendo. Los clientes que reciben un servidor de " no respondieron de manera oportuna " mensaje (utilizando el cliente .Net TCP).

¿Fue útil?

Solución

Puedes estar muriendo de hambre en la pila. Es bastante fácil drenar en un entorno alto de transacciones de apertura / cierre por segundo, p. Servidor web que sirve un montón de solicitudes no agrupadas.

Esto se ve agravado por el retraso de TIEMPO DE ESPERA predeterminado: la cantidad de tiempo que un socket debe estar cerrado antes de ser reciclado por defecto a 90 (si recuerdo bien)

Hay un montón de claves de registro que se pueden modificar: sugiera que al menos se creen / editen las siguientes claves

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

Muchos documentos en MSDN & amp; Technet sobre la función de estas teclas.

Otros consejos

¿No ha maximizado los identificadores de puerto disponibles?      netstat -a

Vi algo similar cuando una aplicación abría y cerraba puertos (pero en realidad no los cerraba correctamente).

Use netstat -a para ver las conexiones activas cuando esto suceda. Quizás, su aplicación de servidor no está cerrando / eliminando conexiones 'cerradas'.

Buenas sugerencias de todos, gracias por su ayuda.

Así que esto es lo que estaba pasando: Resulta que teníamos varios servicios compitiendo por el mismo puerto, y la mayoría de las veces el " correcto " El servicio llegaría al puerto. Ocasionalmente, un segundo servicio tomaría el puerto, y el primer servicio intentaría abrir un puerto diferente. A partir de ese momento, los servicios seguirían tomando nuevos puertos cada vez que atendían una solicitud (ya que no estaban usando sus puertos preferidos) y, finalmente, agotaríamos todos los puertos disponibles.

Por supuesto, la pregunta real era: "¿Puede una aplicación desordenar toda la pila TCP / IP?", y la respuesta a esa pregunta es: Sí. Una forma de hacerlo es escuchar en un montón de puertos.

Supongo que el comentario del número de puerto de RichS es correcto.

Aparte de eso, la pila TCP / IP es solo un módulo en su sistema operativo y, como tal, puede tener errores que podrían permitir que una aplicación lo elimine. No sería el primer controlador en ser asesinado por un programa.

(Un consejo para Andrew Tanenbaum por insistir en que los sistemas operativos deben ser modulares en lugar de monolíticos).

He estado en un par de situaciones similares yo mismo. Un buen paso para la solución de problemas es intentar una conexión desde la máquina afectada a un destino conocido que no esté experimentando ningún problema de conectividad en ese momento. Si el intento de conexión falla, es muy probable que obtenga más detalles interesantes en el mensaje / código de error. Por ejemplo, podría decir que no hay suficientes manejadores o memoria.

Desde el punto de vista de soporte y administración de sistemas, solo he visto esto en las ocasiones más raras (más de una vez), pero ciertamente puede suceder.

Cuando esté diagnosticando el problema, debe eliminar cuidadosamente las posibles causas, en lugar de reiniciar a ciegas el sistema a la primera señal de problemas. Solo digo esto porque muchos clientes con los que trabajo están tentados a hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top