Compartir a través de


Solucionar problemas de alta CPU en máquinas virtuales Azure Windows

Resumen

Los problemas de rendimiento se producen en diferentes sistemas operativos o aplicaciones, y cada problema requiere un enfoque único para solucionarlo. La mayoría de estos problemas giran en torno a la CPU, la memoria, las redes y la entrada/salida (E/S) como lugares clave donde se produce el problema. Cada una de estas áreas genera síntomas distintos (a veces simultáneamente) y requiere un diagnóstico y una solución diferentes.

En este artículo se tratan los problemas de uso elevado de la CPU que se producen en las máquinas virtuales (VM) de Azure que ejecutan el sistema operativo Windows.

Problemas de alta CPU en máquinas virtuales Azure Windows

Aparte de los problemas de E/S y latencia de red, la resolución de problemas de CPU y memoria requiere las mismas herramientas y pasos que los servidores locales. Una de las herramientas que suele utilizar Microsoft es PerfInsights (disponible tanto para Windows como para Linux). PerfInsights puede proporcionar un diagnóstico de las mejores prácticas de Azure VM en un informe fácil de usar. PerfInsights es también una herramienta de envoltura que puede ayudar a recopilar datos de Perfmon, Xperf y Netmon, dependiendo de las banderas que se seleccionen dentro de la herramienta.

La mayoría de las herramientas de solución de problemas de rendimiento existentes, como Perfmon o Procmon, que se utilizan para servidores locales, funcionarán en máquinas virtuales Windows de Azure. Sin embargo, PerfInsights está diseñado explícitamente para que las máquinas virtuales de Azure proporcionen más información, incluidas las mejores prácticas de Azure, las mejores prácticas de SQL, gráficos de latencia de E/S de alta resolución, fichas de CPU y memoria, etc.

Tanto si se ejecuta en modo usuario como en modo núcleo, cualquier subproceso de un proceso activo requiere ciclos de CPU para ejecutar el código a partir del cual se ha creado. Muchas cuestiones están directamente relacionadas con la carga de trabajo. El tipo de carga de trabajo que existe en el servidor determina el consumo de recursos, incluida la CPU.

Factores comunes

Los siguientes factores son comunes en una situación de alta CPU:

  • Un cambio de código o implantación reciente que se aplica principalmente a aplicaciones como Internet Information Services (IIS), Microsoft SharePoint, Microsoft SQL Server o aplicaciones de terceros.

  • Una actualización reciente que puede estar relacionada con una actualización a nivel de sistema operativo o con actualizaciones y correcciones acumulativas a nivel de aplicación.

  • Un cambio de consulta o índices obsoletos. Las aplicaciones de nivel de datos de SQL Server y Oracle también tienen como otro factor la optimización del plan de consultas. Los cambios en los datos o la falta de índices adecuados pueden hacer que varias consultas se vuelvan más intensivas desde el punto de vista informático.

  • Específico de Azure VM. Hay ciertos procesos como RDAgent, y procesos específicos de extensiones como Monitoring Agent, MMA agent, o Security client, que pueden causar un alto consumo de CPU. Estos procesos deben considerarse desde la perspectiva de la configuración o de los problemas conocidos.

Solucionar el problema

Este artículo se centra en aislar el proceso problemático. El análisis posterior será específico para el proceso que esté provocando un consumo elevado de CPU.

Por ejemplo, si el proceso es SQL Server (sqlservr.exe), los siguientes pasos serán analizar qué consulta estaba utilizando más ciclos de CPU en un periodo de tiempo específico.

Alcance de la cuestión

Estas son algunas preguntas que debes hacerte para solucionar el problema:

  • ¿Existe un patrón en este asunto? Por ejemplo, ¿el problema de la CPU alta se produce a una hora determinada cada día, semana o mes? Si es así, ¿puede correlacionar este problema con un trabajo, informe o inicio de sesión de usuario?

  • ¿Empezó el problema de la CPU alta después de un cambio de código reciente? ¿Ha aplicado una actualización en Windows o en una aplicación?

  • ¿El problema de consumo elevado de CPU comenzó tras un cambio en la carga de trabajo, como un aumento del número de usuarios, una mayor afluencia de datos o un mayor número de informes?

  • En el caso de Azure, ¿se inició el problema de CPU alta en alguna de las siguientes condiciones?

    • Tras una redistribución o reinicio recientes
    • Cuando cambia una SKU o un tipo de VM
    • Cuando se añade una nueva extensión
    • Después de realizar los cambios en el equilibrador de carga

Advertencias sobre Azure

Comprenda su carga de trabajo. Al seleccionar una máquina virtual, es posible que subestime el número de CPU virtuales (vCPU) a la hora de calcular el coste mensual total del alojamiento. Si su carga de trabajo es intensiva en computación, seleccionar una SKU de VM más pequeña que tenga una o dos vCPUs puede causar problemas de carga de trabajo. Pruebe diferentes configuraciones para su carga de trabajo a fin de determinar la mejor capacidad de computación necesaria.

Hay determinadas series de VM, como la serie B (modo ráfaga), que se recomiendan para el control de calidad (QA) y las pruebas. El uso de estas series en el entorno de producción limita la capacidad de cálculo una vez agotados los créditos de CPU.

Para aplicaciones conocidas como SQL Server, Oracle, RDS (Remote Desktop Services), Azure Virtual Desktop, IIS o SharePoint, existen artículos de Azure Best Practices que incluyen recomendaciones de configuración mínima para estas cargas de trabajo.

Problemas continuos con la CPU

Si el problema está ocurriendo en este momento, esta es la mejor oportunidad para capturar la traza del proceso para determinar qué está causando el problema. Puede utilizar las herramientas existentes que ha estado utilizando para los servidores Windows locales para localizar el proceso. Azure Support recomienda las siguientes herramientas para las máquinas virtuales de Azure.

PerfInsights

PerfInsights es la herramienta recomendada por el soporte de Azure para los problemas de rendimiento de las máquinas virtuales. Está diseñado para cubrir las mejores prácticas y pestañas de análisis dedicadas para CPU, Memoria y gráficos de E/S de alta resolución. Puede ejecutarlo OnDemand a través del portal de Azure, o desde dentro de la VM. Puede compartir los datos con el equipo de soporte de Azure.

Ejecutar PerfInsights

PerfInsights está disponible para los sistemas operativos Windows y Linux. Para Windows, estas son las opciones.

Ejecutar y analizar informes a través del portal Azure

Cuando se instala a través del portal de Azure, realmente instala una extensión en la VM. Los usuarios también pueden instalar PerfInsights como una extensión yendo directamente a Extensiones en VM blade y, a continuación, eligiendo una opción de diagnóstico de rendimiento.

Portal Azure Opción 1

Examine el blade de la VM y seleccione la opción Diagnósticos de rendimiento. Se le pedirá que instale la opción (utiliza extensiones) en la máquina virtual para la que la ha seleccionado.

              Captura de pantalla del botón Instalar diagnósticos de rendimiento en la opción Diagnósticos de rendimiento.                            

Portal Azure Opción 2

Vaya a Diagnóstico y solución de problemas en la hoja VM y busque Problemas de rendimiento de la VM.

              Captura de pantalla de los Problemas de rendimiento de la máquina virtual en la opción Diagnosticar y resolver el problema.                            

Si selecciona Solución de problemas, se carga la pantalla de instalación de PerfInsights.

Si selecciona Instalar, la instalación proporciona diferentes opciones de recogida.

              Captura de pantalla de la configuración del análisis de rendimiento en la opción Diagnóstico de rendimiento.                            

Las opciones numeradas en la captura de pantalla se refieren a los siguientes comentarios:

  1. Para la opción de Alta CPU, seleccione Análisis de rendimiento o Avanzado.

  2. Cuando añada síntomas aquí, se añadirán al informe, lo que le ayudará a compartir información con Azure Support.

  3. Seleccione la duración de la recogida de datos. Para la opción de CPU alta, seleccione al menos 15 minutos o más. En el modo de portal Azure, puede recopilar hasta 15 minutos de datos. Para períodos de recogida más largos, debe ejecutar el programa como un ejecutable dentro de la máquina virtual.

  4. Si Azure Support le pide que recopile estos datos, puede añadir aquí el número de ticket. Este campo es opcional.

  5. Seleccione este campo para aceptar el Contrato de Licencia de Usuario Final (CLUF).

  6. Seleccione este campo si desea que este informe esté disponible para el equipo de soporte de Azure que ayuda en este caso.

El informe se almacena en una de las cuentas de almacenamiento de su suscripción. Está disponible para ver y descargar más tarde.

Ejecutar PerfInsights desde la máquina virtual

Este método se puede utilizar si tiene intención de ejecutar PerfInsights durante periodos más largos. El artículo PerfInsights ofrece un recorrido detallado de los diferentes comandos y banderas que se requieren para ejecutar PerfInsights como un ejecutable. Para el uso de CPU alta, necesitarás cualquiera de los siguientes modos:

  • Escenario avanzado

    • PerfInsights /run advanced xp /d 300 /AcceptDisclaimerAndShareDiagnostics
  • Escenario VM Slow (Rendimiento)

    • PerfInsights /run vmslow /d 300 /AcceptDisclaimerAndShareDiagnostics /sa <StorageAccountName> /sk <StorageAccountKey>

La salida del comando estará en la misma carpeta en la que guardó el ejecutable de PerfInsights.

Qué buscar en el informe

Después de ejecutar el informe, la ubicación del contenido depende de si se ejecutó a través del portal de Azure o como un ejecutable. Para cualquiera de las dos opciones, acceda a la carpeta de registro generada o descárguela (si es el portal Azure) localmente para su análisis.

Ejecutar a través del portal Azure

              Captura de pantalla de un diagnóstico de rendimiento de alto impacto.                            

              Captura de pantalla del botón Descargar informe en la página Informe de diagnóstico de rendimiento.                            

Ejecutar desde una máquina virtual

Su estructura de carpetas debe parecerse a las siguientes imágenes:

              Captura de pantalla de la carpeta de salida y del archivo PerfInsight Report HTML en su estructura de carpetas.                            

              Captura de pantalla del GeneralCounters_000001.blg y System.evtx en su estructura de carpetas.                            

  1. Todas las colecciones adicionales, como Perfmon, Xperf, Netmon, registros SMB, registros de eventos, etc., se encuentran en la carpeta Output.

  2. El informe propiamente dicho, junto con el análisis y las recomendaciones.

  3. Tanto para Rendimiento (VMslow) como para Avanzado, el informe recopila perfmon información durante la ejecución de PerfInsights.

  4. Los registros de eventos muestran una vista rápida de detalles útiles a nivel de sistema o de caída de procesos.

¿Por dónde empezar?

Abra el informe PerfInsights. La pestaña Resultados registra cualquier valor atípico en términos de consumo de recursos. Si hay casos de uso elevado de CPU, la pestaña Encontrados lo clasificará como Impacto alto o Impacto medio.

                             Captura de pantalla de la pestaña Hallazgos en la parte CPU de la página Informe de PerfInsights. En este ejemplo, el nivel de impacto es Medio.                                     

Al igual que en el ejemplo anterior, PerfInsights se ejecutó durante 30 minutos. Durante la mitad de ese tiempo, el proceso destacado fue CPU agotador en el lado superior. Si el mismo proceso se hubiera estado ejecutando durante todo el tiempo de recogida, el nivel de impacto habría cambiado a ALTO.

Si amplía el evento Encontrados, verá varios detalles clave. La pestaña enumera los procesos en orden descendente, por Promedio de consumo de CPU, y muestra si el proceso estaba relacionado con el sistema, con una aplicación propiedad de Microsoft (SQL, IIS) o con un proceso de terceros.

Más detalles

Hay una subpestaña dedicada en CPU que se puede utilizar para el análisis detallado de patrones, por núcleo o por proceso.

La pestaña Principales consumidores de CPU tiene dos secciones separadas de interés, y aquí puede ver las estadísticas por procesador. Con frecuencia, el diseño de la aplicación es Single-Threaded o se limita a un único procesador. En este escenario, uno o unos pocos núcleos funcionan al 100 %, mientras que otros núcleos funcionan a niveles esperados. Estos escenarios son más complejos porque la CPU media del servidor parece funcionar como se espera, pero los procesos que están anclados en núcleos que tienen un uso elevado serán más lentos de lo esperado.

                             Captura de pantalla de la pestaña Principales consumidores de CPU en la parte de CPU de la página Informe de PerfInsights, que muestra el Periodo de análisis de diagnóstico de rendimiento y los Periodos de uso elevado de CPU.                                     

La segunda sección (igual de importante), es Top Long Running CPU Consumers. Esta sección muestra tanto los detalles de los procesos como su patrón de uso de la CPU. La lista está ordenada por tener en la parte superior un alto consumo medio de CPU.

                             Captura de pantalla de la sección Top Long Running CPU Consumers.                                     

Estas dos pestañas serán suficientes para establecer el camino para los siguientes pasos de solución de problemas. Dependiendo del proceso que esté impulsando la condición de alta CPU, tendrá que abordar las preguntas que se plantearon anteriormente. Procesos como SQL Server (sqlservr.exe) o IIS (w3wp.exe) requieren un desglose específico de los cambios de consulta o código que están causando esta condición. Para procesos del sistema como WMI o Lsass.exe, hay que seguir un camino diferente.

Para los procesos relacionados con Azure VM, como RDAgent, OMS y los ejecutables de extensión de supervisión, es posible que tenga que corregir una nueva compilación o versión obteniendo ayuda del equipo de soporte de Azure.

Perfmon

Perfmon es una de las primeras herramientas para solucionar un problema de recursos en Windows Server. No ofrece un informe claro con recomendaciones o conclusiones. En su lugar, requiere que el usuario explore los datos recogidos y utilice un filtro específico en las distintas categorías de contadores.

PerfInsights recoge Perfmon como un registro adicional para VMSlow y escenarios avanzados. Sin embargo, Perfmon puede recopilarse de forma independiente, y tiene estas ventajas adicionales:

  • Se puede recoger a distancia.

  • Se puede programar a través de Tareas.

  • Puede recogerse durante periodos más largos o en modo continuo utilizando la función de volcado.

Considere el mismo ejemplo que se muestra en PerfInsights para ver cómo Perfmon muestra estos datos. Las categorías de contadores necesarias son las siguientes:

  • Información del procesador > %Tiempo del procesador > _Total

  • Procesar > %ProcessorTime > Todas las instancias

¿Por dónde empezar?

Los nombres de los archivos de salida de Perfmon tienen una extensión .blg. Puede recopilar estos archivos de forma independiente o utilizando PerfInsights. Para esta discusión, utilizará el Perfmon .blg que se incluye en los datos de PerfInsights y que se recopilaron según el ejemplo anterior.

En Perfmon no hay informes disponibles por defecto para el usuario. Existen diferentes vistas que cambian el tipo de gráfico, pero el filtrado de procesos (o el trabajo necesario para identificar los procesos culpables) es manual.

Nota:

La herramienta PAL puede consumir archivos .blg y generar informes detallados.

Para empezar, seleccione la categoría Añadir contadores.

  1. En Contadores disponibles, seleccione el contador %ProcessorTime de la categoría Información del procesador.

  2. Seleccione _Total, que le ofrece las estadísticas de todos los núcleos combinados.

  3. Seleccione Agregar. La ventana muestra %ProcessorTime bajo Contadores agregados.

                             Captura de pantalla del cuadro de diálogo Añadir contadores en el Monitor de rendimiento.                                     

Una vez cargados los contadores, verá gráficos de tendencias lineales en el marco temporal de recogida. Puede seleccionar o borrar los contadores. Hasta ahora, sólo ha añadido un contador.

                             Captura de pantalla de los gráficos de tendencia lineal en el marco temporal de recogida.                                     

Cada contador tendrá los valores Promedio, Mínimo y Máximo. Céntrese tanto en los valores Promedio y Máximo, ya que el valor promedio puede variar en función de la duración de la recopilación de datos. Si la actividad de la CPU alta se observó durante 10 minutos mientras que la recogida total fue de 40 minutos, los valores medios serán mucho más bajos.

El gráfico de tendencia anterior muestra que el Procesador total estuvo oscilando cerca del 80 por ciento durante aproximadamente 15 minutos.

Identificar el proceso

Hemos identificado que el servidor tuvo un alto consumo de CPU durante un tiempo determinado, pero aún no hemos identificado el controlador. A diferencia del uso de PerfInsights, en este caso debe buscar manualmente el proceso culpable.

Para esta tarea debe borrar o eliminar los contadores %ProcessorTime añadidos anteriormente y, después, añadir una nueva categoría:

  • Procesar > %ProcessorTime > Todas las instancias

Esta categoría cargará los contadores de todos los procesos que se estén ejecutando en ese momento.

                             Captura de pantalla de los pasos para añadir la nueva categoría.                                     

En un ordenador de producción típico, pueden estar ejecutándose cientos de procesos. Por lo tanto, puede llevar un tiempo borrar todos los contadores que parezcan tener un gráfico de tendencia bajo o plano.

Para acelerar este proceso, utilice la vista Histograma y cambie el tipo de vista de Línea a Histograma, con lo que obtendrá un gráfico de barras. Descubrirá que es más fácil elegir los procesos que experimentan un uso elevado de la CPU durante el tiempo de recogida.

Como siempre habrá una barra para Total, concéntrese en las barras que estén mostrando un alto índice de agotamiento. Puedes eliminar las otras barras para limpiar la vista. Ahora, vuelve a la vista Línea.

              Captura de pantalla del botón de vista Histograma en el Monitor de Rendimiento y un gráfico de ejemplo que contiene 2 barras que muestran un alto índice de agotamiento.                            

Ahora es más fácil detectar el proceso culpable. Por defecto, los valores Máx y Mín son múltiplos del número de núcleos del servidor o de hilos del proceso.

                             Captura de pantalla de un gráfico de tendencia lineal que muestra claramente el proceso culpable.                                     

La lista de herramientas disponibles no termina en PerfInsights para Perfmon. Tiene acceso a otras herramientas, como ProcessMonitor (ProcMon) o Xperf. Hay muchas herramientas de terceros disponibles para utilizar según sea necesario.

Herramientas de supervisión de Azure

Las máquinas virtuales de Azure tienen métricas fiables que incluyen información básica como CPU, E/S de red y bytes de E/S. Para las métricas avanzadas, como Azure Monitor, sólo tendrá que realizar unas pocas selecciones para configurar y utilizar una cuenta de almacenamiento que especifique.

Contadores básicos (por defecto)

              Captura de pantalla de la página Métricas de Azure Monitor. En este ejemplo, se ha seleccionado la opción Porcentaje de CPU en el ajuste Agregación.                            

Activación de Azure Monitor

Después de habilitar las métricas de Azure Monitor, el software instala una extensión en la máquina virtual y comienza a recopilar métricas granulares, que incluyen contadores Perfmon.

              Captura de pantalla del campo Cuenta de almacenamiento de Diagnósticos en la pestaña Descripción general de la página de configuración de Diagnósticos.                            

Las categorías de contador Básico se establecen como por defecto. Sin embargo, también puede establecer una colección Personalizada.

              Captura de pantalla de la opción Categorías básicas en la pestaña Contadores de rendimiento de la página Configuración de diagnóstico.                            

Una vez activados los ajustes, puede ver estos contadores de Invitados en la sección Métricas. También puede establecer Alertas (incluidos mensajes de correo electrónico) si las métricas alcanzan un determinado umbral.

              Captura de pantalla del campo Espacio de nombres de la métrica y del botón Nueva regla de alerta en la página Métricas.                            

Para obtener más información sobre cómo utilizar Azure monitor para gestionar máquinas virtuales de Azure, consulte Monitorización de máquinas virtuales de Azure con Azure Monitor.

Solución reactiva de problemas

Si el problema ya se ha producido, debe descubrir qué causó el problema de alta CPU en primer lugar. La postura reactiva puede ser complicada. El modo de recogida de datos no será tan útil porque el problema ya se ha producido.

Si este problema se produce una sola vez, puede ser difícil determinar qué aplicación lo causó. Si la VM de Azure estaba configurada para utilizar OMS u otro seguimiento de diagnósticos, aún puede obtener información sobre la causa del problema.

Si se trata de un patrón repetitivo, recoja los datos en el momento en que es probable que se produzca el siguiente problema.

PerfInsights aún no dispone de la función Ejecución programada. Sin embargo, Perfmon puede ejecutarse y programarse a través de la línea de comandos.

Comando Logman

El comando Logman Create Counter se utiliza para ejecutar la recopilación Perfmon a través de la línea de comandos, para programarla a través de Task Manager o para ejecutarla de forma remota.

Muestra (incluye modo de recogida remota)

Logman create counter LOGNAME -u DOMAIN\USERNAME * -f bincirc -v mmddhhmm -max 300 -c "\\SERVERNAME\LogicalDisk(*)\*" "\\SERVERNAME\Memory\*" "\\SERVERNAME\Network Interface(*)\*" "\\SERVERNAME\Paging File(*)\*" "\\SERVERNAME\PhysicalDisk(*)\*" "\\SERVERNAME\Process(*)\*" "\\SERVERNAME\Redirector\*" "\\SERVERNAME\Server\*" "\\SERVERNAME\System\*" "\\SERVERNAME\Terminal Services\*" "\\SERVERNAME\Processor(*)\*" "\\SERVERNAME\Cache\*" -si 00:01:00

Logman.exe también se puede iniciar desde un equipo VM Azure homólogo en la misma VNET.

Para obtener más información sobre estos parámetros, consulte logman create counter.

Una vez recopilados los datos de Perfmon mientras se produce el problema, los pasos restantes para analizar los datos son los mismos que los comentados anteriormente.

Conclusión

Para resolver cualquier problema de rendimiento, es fundamental conocer la carga de trabajo. Las opciones sobre diferentes SKU de máquinas virtuales y diferentes opciones de almacenamiento en disco deben evaluarse centrándose en la carga de trabajo de producción. El proceso de probar soluciones en diferentes máquinas virtuales puede ayudarle a tomar la mejor decisión.

Dado que las operaciones del usuario y la cantidad de datos varían, mantenga siempre una reserva en las capacidades de computación, red y E/S de la máquina virtual. Ahora, cualquier cambio repentino en la carga de trabajo no tiene un efecto tan grande.

Si prevé que la carga de trabajo aumentará pronto, cambie a una SKU superior que tenga más potencia de cálculo. Si la carga de trabajo va a ser intensiva en computación, elija bien las SKU de máquinas virtuales.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.