Tengo una aplicación web ASP.NET (v4.0) que está instalada en un directorio virtual (como una aplicación) y está alojada en su propio grupo de aplicaciones. Esto se repite para cada instancia de la aplicación (es decir, por cliente).
Los grupos de aplicaciones están en modo integrado (no clásico) y LoadUserProfile se establece en verdadero. De lo contrario, la configuración predeterminada.
Cada instancia actualmente tiene su propia copia del código / configuración y su propia carpeta de datos (lectura / escritura de archivos básicos).
1 instancia de esta aplicación funciona bien (la operación utilizada para la comparación lleva ~ 4 segundos). Cada otra instancia se ejecuta lentamente (de 10 a 25 segundos para la misma operación).
Si muevo la instancia más lenta al grupo de aplicaciones "más rápido", esa instancia cobra vida. Si muevo la instancia más rápida al grupo de aplicaciones más lento, esa instancia se ralentiza a un rastreo.
Los grupos de aplicaciones se crearon de la misma manera inicialmente: manualmente. Más tarde utilicé la rutina de copia de PowerShell para garantizar una copia exacta del grupo de aplicaciones más rápido y aún el mismo comportamiento. La comparación de los archivos apppool.config muestra que son idénticos, salvo las asignaciones de directorio virtual.
No hay recursos compartidos que se estén bloqueando, por lo que puedo decir, y lo probé cerrando el grupo de aplicaciones y reiniciando ... lento sigue siendo lento, y luego cuando reinicio ese grupo de aplicaciones (por lo que está cargado último) es aún más rápido ...
Respuestas:
Para aislar aún más el problema, sugeriría ejecutar Wireshark (u otro analizador de paquetes de elección) en el sistema host, durante dos sesiones. Supongo que estoy haciendo que cada grupo de aplicaciones tiene una IP única asignada o un puerto único.
Primero obtenga su rendimiento de referencia mediante el filtrado en el puerto IP: de su grupo de aplicaciones rápidas. Vea cómo se ve el tráfico hacia y desde la aplicación en condiciones "normales".
La segunda ejecución, deberá capturar el tráfico del grupo de aplicaciones lento / que no responde. Si todo el enrutamiento de la red y tal es correcto hasta el cuadro, debería ver las solicitudes repetidas en una dirección, muy probablemente a la aplicación desde otro lugar, PERO si su aplicación es algo que hace muchas solicitudes a otro servidor, su tráfico puede ser pesado en egreso en lugar de ingreso.
Esta prueba le dirá si el problema está dentro de la aplicación, o si se trata de problemas relacionados con TCP / IP que provocan que las solicitudes a la aplicación excedan el tiempo de espera debido a la falta de comunicación.
Correlacione las marcas de tiempo de sus pruebas con los registros de eventos del servidor y (si corresponde) los registros de seguimiento de seguimiento, y debería poder concentrarse en el problema.
fuente
El seguimiento de solicitudes fallidas (FRT) será su mejor herramienta para rastrear esto. Mostrará la tubería y cuánto tiempo tomó completar cada paso. Eso debería señalar si es algo dentro de la porción asp.net o si es algo dentro de la tubería de IIS.
Para configurar FRT, desde IIS a nivel de sitio, cree una regla FRT con un rango de estado http de 200-999 y asegúrese de habilitar FRT (es un paso separado del panel de acciones).
Luego reproduzca el problema y mire los archivos generados (% SystemDrive% \ inetpub \ logs \ FailedReqLogFiles \ w3svc {siteid}). Ábrelos en Internet Explorer.
fuente
Cuando IIS se demora por largos períodos de tiempo sin razón aparente, generalmente significa que está esperando que se agote el tiempo de espera de un servicio externo. Cuando lo hace, entonces intenta otro enfoque. De hecho, esto es cierto para casi cualquier cosa en Windows o Linux. El primer sospechoso para mí en estas situaciones es siempre la configuración de resolución de nombre de red. Es culpable hasta que se demuestre su inocencia.
¿Se puede recrear esto con un usuario accediendo a uno de los sitios duplicados? Sería bueno saber qué hacen la CPU y los discos cuando recrea el tiempo de respuesta de 10 a 20 segundos. Si parece que no sucede mucho durante los 10-20 segundos, entonces debe verificar sus nombres vinculantes y la resolución de nombres para los nombres vinculados. Si la CPU o los discos están masticando, entonces deberá averiguar qué proceso está trabajando demasiado y por qué.
Por favor publique sus hallazgos, tengo curiosidad.
PD: También verificaría la resolución de nombres y el acceso a cualquier servicio de autenticación que pueda estar en juego. Por ejemplo, si es necesario consultar el servidor de dominio, asegúrese de que el primer servidor DNS de su lista sea el servidor DNS para el dominio.
fuente
Esta no es la solución, pero trabajaremos para lograrlo;
Ejecute IISRESET (durante las horas de mantenimiento) o elimine el W3WP que pertenece al grupo de aplicaciones que no responde
Iniciar la aplicacion
Si bien no responde, tome un archivo de volcado de W3WP que pertenezca al grupo de aplicaciones lentas. Utilice el explorador de procesos o el administrador de tareas para crear un archivo de volcado
Tome el mscordacwks.dll y mscorwks.dll desde C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.XXXXX
Comprima y cargue estos archivos en algún lugar desde donde pueda descargarlos.
fuente