Cómo diagnosticar problemas con máquinas virtuales: Análisis del rendimiento del subsistema de disco

Las máquinas virtuales (MV) se han convertido en una parte integral de la infraestructura de TI moderna. Sin embargo, como cualquier otro equipo complejo, las MV son propensas a problemas. Una de las causas más comunes de la disminución del rendimiento de las MV es el rendimiento insuficiente del subsistema de disco. En este artículo, examinaremos en detalle los métodos de diagnóstico de problemas relacionados con los discos de las máquinas virtuales y proporcionaremos ejemplos prácticos para su detección y resolución.

Nos centraremos en el análisis del rendimiento del subsistema de disco, ya que esta área suele ser un cuello de botella y requiere una consideración cuidadosa. Analizaremos las herramientas y los métodos de monitorización, el análisis de métricas y la configuración del sistema de disco para lograr un rendimiento óptimo.

Monitorización de entrada/salida (E/S)

Cómo diagnosticar problemas con máquinas virtuales? - Ventana de monitorización de operaciones de E/S en una máquina virtual con métricas IOPS, rendimiento y latencia resaltadas.

La monitorización eficaz de la entrada/salida (E/S) es un paso clave en el diagnóstico de problemas con el subsistema de disco de la MV. La monitorización permite rastrear los principales indicadores de rendimiento, como IOPS (número de operaciones de entrada/salida por segundo), el rendimiento (throughput) y la latencia. El análisis de estas métricas permite identificar áreas problemáticas y determinar si el subsistema de disco es un cuello de botella.

Existen varias herramientas que se pueden utilizar para monitorizar la E/S en máquinas virtuales, incluidas las herramientas integradas de los sistemas operativos, así como soluciones especializadas para la monitorización de la infraestructura virtual.

VPS хостинг

Виртуальные серверы с гарантированными ресурсами

Выбрать VPS

Uso de iostat para la monitorización de E/S en Linux

La utilidad iostat es una potente herramienta de línea de comandos disponible en la mayoría de las distribuciones de Linux. Proporciona información detallada sobre el rendimiento de los discos, incluyendo IOPS, rendimiento, uso de CPU y tiempo de espera. iostat permite rastrear la actividad de los discos en tiempo real y recopilar estadísticas para su posterior análisis.

Ejemplo 1: Monitorización básica de E/S con iostat

iostat -x 1

Este comando ejecuta iostat con la opción -x, que muestra estadísticas ampliadas. El número 1 indica el intervalo de actualización de datos en segundos. En la salida del comando verá muchas columnas, incluyendo r/s (número de operaciones de lectura por segundo), w/s (número de operaciones de escritura por segundo), rkB/s (kilobytes leídos por segundo), wkB/s (kilobytes escritos por segundo), await (tiempo medio de espera de las operaciones de E/S) y %util (porcentaje de tiempo durante el cual el disco estuvo ocupado). Preste atención a los valores await y %util, que pueden indicar problemas con el rendimiento del disco.

Ejemplo 2: Monitorización de un disco específico con iostat

iostat -x sda 1

Este comando permite rastrear las estadísticas solo para el disco sda. Reemplace sda con el nombre del disco que le interesa. Esto es útil cuando tiene varios discos en el sistema y desea centrarse en un dispositivo específico.

Ejemplo 3: Guardar los datos de iostat en un archivo para su posterior análisis

iostat -x 1 > iostat.log

Este comando redirige la salida de iostat al archivo iostat.log. Esto permite recopilar estadísticas durante un período de tiempo prolongado y analizar los datos más tarde utilizando un editor de texto o herramientas especializadas de análisis de registros.

Uso del Monitor de rendimiento (perfmon) en Windows

El Monitor de rendimiento (perfmon) es una herramienta de monitorización integrada en Windows que proporciona una amplia gama de métricas de rendimiento, incluidas las métricas del subsistema de disco. perfmon permite rastrear la E/S en tiempo real y crear informes para el análisis de datos históricos.

Ejemplo 1: Monitorización de IOPS con el Monitor de rendimiento

  • Abra el Monitor de rendimiento escribiendo «perfmon» en la barra de búsqueda de Windows.
  • En el panel izquierdo, seleccione «Monitor de rendimiento».
  • Haga clic en el icono «+» (Agregar contadores) en la barra de herramientas.
  • En el cuadro de diálogo «Agregar contadores», seleccione «PhysicalDisk» o «LogicalDisk» (dependiendo de los discos que desee rastrear).
  • Seleccione el contador «% Disk Time» (porcentaje de tiempo durante el cual el disco estuvo ocupado) y «Disk Transfers/sec» (número de operaciones de E/S por segundo).
  • Haga clic en «Agregar», luego en «Aceptar».

Ahora verá gráficos que muestran los valores de los contadores seleccionados en tiempo real. Un valor alto de «% Disk Time» (cercano al 100%) puede indicar una sobrecarga del disco.

Ejemplo 2: Monitorización de la latencia del disco con el Monitor de rendimiento

  • Repita los pasos descritos anteriormente.
  • En el cuadro de diálogo «Agregar contadores», seleccione «PhysicalDisk» o «LogicalDisk».
  • Seleccione el contador «Avg. Disk sec/Transfer» (tiempo promedio empleado en una operación de E/S).
  • Haga clic en «Agregar», luego en «Aceptar».

Este contador muestra el tiempo promedio empleado en una operación de E/S en segundos. Un valor alto puede indicar problemas con la latencia del disco.

Ejemplo 3: Creación de un informe de rendimiento del disco con el Monitor de rendimiento

  • Abra el Monitor de rendimiento.
  • En el panel izquierdo, expanda «Conjuntos de recopiladores de datos» y seleccione «Definido por el usuario».
  • Haga clic con el botón derecho en el panel derecho y seleccione «Nuevo» -> «Conjunto de recopiladores de datos».
  • Ingrese un nombre para el conjunto de datos (por ejemplo, «DiskPerformance»).
  • Seleccione «Crear manualmente (Avanzado)» y haga clic en «Siguiente».
  • Seleccione «Crear registros de datos» y marque la casilla junto a «Contador de rendimiento». Haga clic en «Siguiente».
  • Haga clic en «Agregar» y seleccione los contadores que desea rastrear (por ejemplo, «% Disk Time», «Disk Transfers/sec», «Avg. Disk sec/Transfer»). Haga clic en «Aceptar».
  • Especifique el intervalo de recopilación de datos (por ejemplo, 1 segundo). Haga clic en «Siguiente».
  • Especifique la ubicación para guardar los registros y haga clic en «Finalizar».

Ahora Perfmon recopilará datos sobre el rendimiento del disco en el archivo especificado. Puede analizar estos datos más tarde abriendo el archivo en el Monitor de rendimiento.

Análisis de latencia

Cómo diagnosticar problemas con máquinas virtuales? - Gráfico que muestra la latencia de las operaciones de disco con picos y valores promedio, mostrando períodos problemáticos.

La latencia es el tiempo que se tarda en completar una operación de entrada/salida. Una latencia alta es uno de los principales signos de problemas con el subsistema de disco y puede afectar significativamente el rendimiento de la MV. El análisis de la latencia permite identificar las causas del funcionamiento lento de los discos y tomar medidas para su eliminación.

La latencia puede ser causada por varios factores, incluyendo la sobrecarga del disco, discos lentos, problemas con el controlador de discos, problemas con la red (en caso de uso de almacenamiento en red) y problemas con la virtualización.

Identificación de las fuentes de latencia

El primer paso en el análisis de la latencia es identificar la fuente del problema. Es necesario determinar si el problema es local para la MV o está relacionado con la infraestructura de almacenamiento de datos.

Ejemplo 1: Comprobación de la latencia con ping

ping -c 4 <IP-адрес_хранилища>

Si la MV utiliza almacenamiento en red (por ejemplo, NFS o iSCSI), compruebe la latencia de la red con el comando ping. Una latencia de red alta puede indicar problemas con la red que afectan el rendimiento del subsistema de disco. Reemplace <IP-адрес_хранилища> con la dirección IP de su almacenamiento en red.

Ejemplo 2: Uso de traceroute para determinar la ruta al almacenamiento

traceroute <IP-адрес_хранилища>

El comando traceroute permite determinar la ruta que recorre el tráfico desde la MV al almacenamiento. Al analizar la ruta, puede identificar los nodos de red problemáticos que pueden causar latencia. Reemplace <IP-адрес_хранилища> con la dirección IP de su almacenamiento en red.

Ejemplo 3: Comprobación de la latencia del disco con hdparm (Linux)

hdparm -tT /dev/sda

La utilidad hdparm se puede utilizar para probar el rendimiento de los discos. La opción -tT realiza una prueba de lectura desde el disco y muestra la velocidad de lectura y el tiempo de almacenamiento en caché. Reemplace /dev/sda con el nombre del disco que se está probando. Aunque hdparm no mide la latencia directamente, puede dar una idea general del rendimiento del disco.

Análisis de las métricas de latencia

Después de identificar la fuente de la latencia, es necesario analizar las métricas de latencia para determinar la causa del problema. Preste atención a las siguientes métricas:

  • Latencia promedio de las operaciones de lectura/escritura: Esta métrica muestra el tiempo promedio empleado en la realización de operaciones de lectura y escritura. Un valor alto puede indicar una sobrecarga del disco o discos lentos.
  • Latencia máxima de las operaciones de lectura/escritura: Esta métrica muestra el tiempo máximo empleado en la realización de operaciones de lectura y escritura. Los grandes picos de latencia pueden indicar problemas de rendimiento a corto plazo.
  • Porcentaje de operaciones que superan un cierto umbral de latencia: Esta métrica muestra qué porcentaje de operaciones tarda más de un cierto tiempo (por ejemplo, 10 ms). Un porcentaje alto puede indicar serios problemas de rendimiento.

Ejemplo: Análisis de los registros de monitorización de E/S

Analice los registros de monitorización de E/S (por ejemplo, los registros recopilados con iostat o el Monitor de rendimiento) para identificar los períodos de alta latencia. Relacione estos períodos con otros eventos en el sistema (por ejemplo, la ejecución de aplicaciones con uso intensivo de recursos, la realización de tareas de copia de seguridad) para determinar las causas de los problemas.

Optimización de la configuración del disco

La configuración correcta del disco es crucial para garantizar un rendimiento óptimo de la MV. Un subsistema de disco configurado incorrectamente puede convertirse en un cuello de botella, incluso si se utilizan discos rápidos y equipos potentes.

La optimización de la configuración del disco incluye la selección del tipo correcto de discos (SSD vs HDD), la configuración de RAID, el uso de LVM (Logical Volume Manager) y la asignación correcta de espacio en el disco.

Selección del tipo de disco: SSD vs HDD

SSD (Solid State Drive) y HDD (Hard Disk Drive) tienen diferentes características de rendimiento. Los SSD proporcionan una velocidad de lectura y escritura significativamente mayor, así como una menor latencia en comparación con los HDD. Sin embargo, los SSD suelen ser más caros que los HDD, especialmente para grandes volúmenes.

Para las MV que requieren un alto rendimiento del subsistema de disco (por ejemplo, bases de datos, aplicaciones con uso intensivo de E/S), se recomienda utilizar SSD. Para las MV utilizadas para el almacenamiento de datos que no requieren un acceso rápido (por ejemplo, archivos, copias de seguridad), se pueden utilizar HDD.

Ejemplo: Migración de una MV de HDD a SSD

Si descubre que una MV funciona lentamente debido al bajo rendimiento del disco, considere la posibilidad de migrar la MV de HDD a SSD. La mayoría de las plataformas de virtualización (por ejemplo, VMware vSphere, Microsoft Hyper-V) proporcionan herramientas para la migración de MV entre diferentes tipos de almacenamiento.

Configuración de RAID

RAID (Redundant Array of Independent Disks) es una tecnología que permite combinar varios discos físicos en un volumen lógico. RAID proporciona tolerancia a fallos y puede mejorar el rendimiento del subsistema de disco.

Los diferentes niveles de RAID (por ejemplo, RAID 0, RAID 1, RAID 5, RAID 10) tienen diferentes características de rendimiento y tolerancia a fallos. La elección del nivel de RAID depende de los requisitos específicos de rendimiento y tolerancia a fallos de la MV.

Ejemplo: Selección del nivel de RAID para una base de datos

Para una base de datos que requiere un alto rendimiento y tolerancia a fallos, se recomienda utilizar RAID 10. RAID 10 proporciona una alta velocidad de lectura y escritura, así como protección contra la pérdida de datos en caso de fallo de uno o varios discos.

Ejemplo: Configuración de RAID con mdadm (Linux)

La utilidad mdadm (Multiple Devices Administration) se utiliza para la gestión de matrices RAID en Linux.

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

Este comando crea una matriz RAID 1 (espejo) a partir de dos discos (/dev/sda1 y /dev/sdb1) y crea el dispositivo /dev/md0. Atención: Este comando provocará la pérdida de datos en los discos /dev/sda1 y /dev/sdb1. Asegúrese de haber realizado una copia de seguridad de los datos antes de ejecutar este comando.

Uso de LVM (Logical Volume Manager)

LVM permite gestionar el espacio en disco de forma flexible. Con LVM, puede crear volúmenes lógicos que se pueden modificar dinámicamente (aumentar o disminuir) sin necesidad de reiniciar el sistema. LVM también proporciona la capacidad de crear instantáneas de volúmenes lógicos, lo que es útil para la copia de seguridad y las pruebas.

Ejemplo: Aumento de un volumen lógico con LVM

Suponga que tiene un grupo de volúmenes vg0 y un volumen lógico lv_data que necesita aumentar.

lvextend -L +10G /dev/vg0/lv_data

Este comando aumenta el volumen lógico /dev/vg0/lv_data en 10 GB. Después de esto, es necesario cambiar el tamaño del sistema de archivos para utilizar el nuevo espacio.

resize2fs /dev/vg0/lv_data

Este comando cambia el tamaño del sistema de archivos ext4 en el volumen lógico /dev/vg0/lv_data para que ocupe todo el espacio disponible.

Detección de cuellos de botella de almacenamiento de datos

Incluso con una configuración óptima de los discos, los cuellos de botella en otros componentes de la infraestructura de almacenamiento de datos pueden afectar negativamente al rendimiento de la MV. Es importante identificar y eliminar estos cuellos de botella para garantizar el máximo rendimiento del subsistema de disco.

Los cuellos de botella pueden surgir en diferentes niveles, incluyendo la CPU, la memoria, la red y el controlador de almacenamiento.

Análisis de la carga de la CPU

Una alta carga de la CPU puede provocar retrasos en el procesamiento de las operaciones de E/S, lo que, a su vez, reduce el rendimiento del subsistema de disco. Es necesario comprobar la carga de la CPU en la MV y en el servidor host para determinar si la CPU es un cuello de botella.

Ejemplo: Monitorización de la carga de la CPU con top (Linux)

top

El comando top muestra una lista de procesos ordenados por uso de la CPU. Preste atención a la columna %CPU, que muestra el porcentaje de uso de la CPU por cada proceso. Si ve procesos que utilizan constantemente la mayor parte de la CPU, esto puede indicar un problema.

Ejemplo: Monitorización de la carga de la CPU con el Administrador de tareas (Windows)

  • Abra el Administrador de tareas pulsando Ctrl+Mayús+Esc.
  • Vaya a la pestaña «Rendimiento».
  • Mire el gráfico «Uso de la CPU».

Si el gráfico muestra que la CPU está constantemente cargada al 90% o más, esto puede indicar un problema.

Análisis del uso de la memoria

La falta de memoria puede provocar un uso activo del archivo de intercambio (swap file), lo que reduce significativamente el rendimiento del subsistema de disco. Es necesario comprobar el uso de la memoria en la MV para determinar si la memoria es un cuello de botella.

Ejemplo: Monitorización del uso de la memoria con free (Linux)

free -m

El comando free -m muestra información sobre el uso de la memoria en megabytes. Preste atención a la columna swap, que muestra el uso del archivo de intercambio. Si el valor used en la columna swap aumenta constantemente, esto puede indicar una falta de memoria.

Ejemplo: Monitorización del uso de la memoria con el Monitor de recursos (Windows)

  • Abra el Monitor de recursos escribiendo «resmon» en la barra de búsqueda de Windows.
  • Vaya a la pestaña «Memoria».
  • Mire el gráfico «Errores graves/seg».

Un valor alto de «Errores graves/seg» indica un uso activo del archivo de intercambio, lo que puede ser causado por una falta de memoria.

Análisis del ancho de banda de la red

En el caso de uso de almacenamiento en red, un ancho de banda de red insuficiente puede convertirse en un cuello de botella. Es necesario comprobar el ancho de banda de la red entre la MV y el almacenamiento para determinar si la red es un cuello de botella.

Ejemplo: Comprobación del ancho de banda de la red con iperf3

iperf3 es una herramienta para medir el ancho de banda de la red.

En el servidor (por ejemplo, en el servidor de almacenamiento):

iperf3 -s

En el cliente (MV):

iperf3 -c <IP-адрес_сервера>

Reemplace <IP-адрес_сервера> con la dirección IP del servidor en el que se ejecuta iperf3 en modo servidor. iperf3 mostrará el ancho de banda actual de la red.

Ejemplo: Monitorización del tráfico de red con tcpdump (Linux)

tcpdump -i eth0 -n host <IP-адрес_хранилища>

Este comando captura el tráfico de red en la interfaz eth0 entre la MV y el almacenamiento con la dirección IP <IP-адрес_хранилища>. El análisis de este tráfico puede ayudar a identificar problemas con la red. Reemplace eth0 con el nombre de su interfaz de red.

Consejo de experto: Realice pruebas de carga de la MV con regularidad para identificar posibles cuellos de botella antes de que comiencen a afectar al rendimiento. Utilice herramientas para crear una carga realista en el subsistema de disco y rastrear las métricas clave de rendimiento.