IIS: cómo saber si un tiempo lento se debe a una conexión de red lenta

10

De acuerdo con http://support.microsoft.com/kb/944884 , "cuando se envía una respuesta grande o respuestas grandes a un cliente a través de una conexión de red lenta, el valor del campo de tiempo puede ser más de lo esperado".

Tengo una situación en la que un cliente dirá: "Envié una solicitud a su servidor web a las 10:03:24 y tardó 20 segundos, ¿por qué?". También puedo ver esto en los registros de IIS, pero el módulo ASP.NET del servidor lo registró como tomando 100 ms, y los contadores de CPU y disco estaban bajos.

Sospecho que se debe a una conexión de red lenta. ¿Cómo puedo probar esto?

Actualizar:

1) Estas son solicitudes de servicios web SOAP, por lo tanto, no hay gráficos incrustados, solo una POST HTTP con una sola página XML de resultados.

2) Además, he reproducido esto al acelerar la velocidad de la red en el lado del cliente y los síntomas son exactamente los mismos.

3) El problema es intermitente, lo que significa que la misma solicitud es normalmente rápida para el cliente pero ocasionalmente lenta. No puedo reproducir esto por mí mismo que no sea estrangular la red. El registro ASP.NET del servidor lo muestra siempre rápido, pero el registro IIS lo muestra lento cuando el cliente dice que es lento.

4) Solo tengo acceso al servidor, y necesito proporcionar tanta información como sea posible al cliente para que acepten que el problema no estaba en el servidor y sepan qué registro / herramientas ejecutar en el cliente para encontrar la causa raíz.

Jon
fuente
¿Estas solicitudes son vistas de página normales que requieren obtener gráficos de incrustación, etc.? ¿O son consultas automatizadas que devuelven solo una página? ¿Estamos realmente midiendo el tiempo para cargar una página o el tiempo para responder a una sola solicitud HTTP?
David Schwartz

Respuestas:

4

Tengo una situación en la que un cliente dirá: "Envié una solicitud a su servidor web a las 10:03:24 y tardó 20 segundos, ¿por qué?". También puedo ver esto en los registros de IIS, pero el módulo ASP.NET del servidor lo registró como tomando 100 ms, y los contadores de CPU y disco estaban bajos.

Sospecho que se debe a una conexión de red lenta. ¿Cómo puedo probar esto?

Comienza con la búsqueda de paquetes descartados entre el navegador de su cliente y todas las fuentes de imágenes / scripts / html para la página web antes mencionada. Si encuentra caídas de paquetes consistentes, entonces sabe con seguridad que hay algo en la red que debe repararse ... incluso si es solo un enlace que está sobrecargado. La caída de paquetes no es la única razón para una red lenta, pero es la fuente más común en mi experiencia. Otras fuentes podrían ser un proxy mal configurado o un motor de caché. Lamentablemente, no puedo enumerar todos los posibles culpables de la red aquí.

Sin embargo, las personas a menudo culpan a la red, cuando de hecho los problemas de velocidad están dentro de su propio control. Posibles explicaciones:

  • Supongamos que el HTML de esa página se escribió mal y carga los scripts necesarios en el orden incorrecto, por lo que toda la página se procesa lentamente, a pesar de que casi todos los recursos estaban en su lugar.
  • La página está esperando un recurso que simplemente no existe y agota el tiempo de espera.
  • Un script está en un ciclo lento que bloquea por un tiempo
  • Un motor de caché tarda mucho en entregar una imagen
  • Su CGI está buscando algo en una base de datos, y la búsqueda en sí es lenta
  • Estás utilizando google analytics , que ralentiza las cosas debido a la forma en que se escribe la página

Podría continuar, pero el punto es que debes precisar la razón exacta de por qué la página es lenta. Una red defectuosa es posible; También es posible que otros factores contribuyan al lento rendimiento.

Para diagnosticar más a fondo:

  • Si la página se carga bien en Firefox, entonces la pestaña Red en Firebug es tu amigo (Presiona F12, luego ve a la pestaña Red y vuelve a cargar la página). Firebug te da un buen diagrama de cascada de cómo se carga la página y dónde están los retrasosCascada Firebug
  • Si la página se carga bien en Chrome, puede hacer algo similar ( CntlShiftIpresione, haga clic en la pestaña de red y vuelva a cargar la página).Cromo
  • Si la página solo es compatible con IE (por cierto, lástima de sus desarrolladores de HTML), su mejor opción es comenzar a cargar cada uno de estos elementos de página ASP individualmente curlhasta que encuentre algo que parece demasiado lento, luego descubra por qué ese elemento en particular es lento.

Por cierto, los ejemplos de Chrome y Firefox utilizaron una consulta CGI de Debian.org ; Este es un buen ejemplo de un retraso que proviene de una búsqueda CGI.

Cuando todo lo demás falla, puede obtener un .pcapde wireshark y ejecutarlo tcptrace; sin embargo, si bien tcptracees muy bueno para analizar los volcados de paquetes, no hay garantías de que pueda aislar el problema tcptracesolo. Consulte esta respuesta para obtener información sobre el uso de tcptracediagnósticos.

Mike Pennington
fuente
Ver mis actualizaciones arriba. Si bien su información es muy útil en el caso general, no creo que se aplique aquí. La página solo es lenta de forma intermitente y los síntomas solo son reproducibles cuando estrangulo la red en el lado del cliente.
Jon
los gráficos de cascada en firefox / chrome admiten operaciones de publicación http, así como curl ... No estoy seguro de cómo concluyó que la información no se aplica, pero parece que no implica una aplicación completa de las herramientas contra el dominio del problema .
Mike Pennington
Firefox / Chrome son herramientas del lado del cliente. Solo tengo acceso al servidor y no puedo volver a usar mi propio cliente. Necesito decir, solo desde el servidor, si una solicitud en particular fue lenta debido a problemas de red. Eso deja la captura de paquetes, pero es demasiado pesado para dejarlo en producción (considere que 1 de cada 10,000 solicitudes puede ser lento).
Jon
Como ingeniero de redes con más de 15 años en mi haber, ¿puedo sugerir respetuosamente que no puede diagnosticar un problema de servicios HTTP del lado del cliente solo desde el servidor; simplemente no tiene suficiente información (que aparentemente también es su conclusión ... sin embargo, no parece estar abierto a vivir con esta realidad :-).
Mike Pennington
Si la captura de paquetes en el servidor puede diagnosticar problemas de red (por ejemplo, al ver un reconocimiento TCP lento), ¿no es razonable esperar que una herramienta / registrador más liviano pueda mostrar lo mismo?
Jon
0

El resultado final del artículo 944884 de kb es que el tiempo real requerido para completar la respuesta puede no reflejarse con precisión en el registro. Es por eso que el artículo menciona el tiempo de la red.

Si el síntoma es reproducible, realizaría una captura de paquetes en el lado del servidor (y preferiblemente también en el lado del cliente) para ver las horas reales en que el cliente reconoció la conexión.

Greg Askew
fuente
Gracias, pero no es reproducible aparte de limitar la velocidad de la red, y una captura de paquetes es demasiado pesada para usarla en la producción.
Jon
0

El retraso de 20 segundos también podría deberse a que IIS tuvo que reiniciar su w3wp.exe, que se irá a dormir cuando no se use.

Steve Rollins
fuente
1
Puede mejorar esta respuesta respondiendo "cómo decir". w3wp.exe ir a dormir no es relevante en mi caso ya que he deshabilitado ese comportamiento, pero esto podría ayudar a otros.
Jon