01Conceptos Básicos sobre Evaluación y Métricas del Rendimiento del Software
En la UF1350 se midió el rendimiento del hardware. Ahora el foco es el software: el sistema operativo, los servicios y las aplicaciones. Un servidor con hardware de sobra puede ir lento porque un servicio está mal configurado, una aplicación tiene una fuga de memoria o una consulta de base de datos bloquea a las demás.
| Métrica de software | Qué mide | Ejemplo |
|---|---|---|
| Tiempo de respuesta | Lo que tarda la aplicación en atender una petición | La pantalla de facturas tarda 4 s en abrir |
| Rendimiento (throughput) | Peticiones o transacciones completadas por unidad de tiempo | 120 peticiones/s en el servidor web |
| Uso de recursos por proceso | CPU, memoria, E/S y red que consume cada programa | El proceso sqlservr.exe usa 12 GB de RAM |
| Tasa de errores | Peticiones que fallan | 2 % de errores 500 en la web |
| Concurrencia | Usuarios, sesiones o conexiones simultáneas | 85 sesiones de escritorio remoto |
| Colas y esperas | Trabajo pendiente esperando un recurso | Cola de impresión con 40 trabajos, bloqueos en la base de datos |
| Disponibilidad del servicio | Tiempo en que el servicio responde correctamente | 99,9 % en el mes |
02Parámetros de Configuración y Rendimiento de los Componentes Software
Software base (sistema operativo)
| Parámetro | Efecto en el rendimiento |
|---|---|
| Plan de energía | «Alto rendimiento» evita que la CPU baje de frecuencia; «Equilibrado» ahorra energía |
| Memoria virtual y fichero de paginación | Tamaño y ubicación (en el disco más rápido) |
| Servicios en ejecución y programas de inicio | Cada uno consume memoria y CPU; desactivar los innecesarios |
| Efectos visuales | Consumo de GPU y CPU en equipos modestos |
| Indexación de búsqueda | Uso de disco y CPU en segundo plano |
| Parámetros del núcleo (Linux, sysctl) | vm.swappiness, límites de ficheros abiertos, búferes de red |
| Antivirus o EDR | Exclusiones bien definidas para bases de datos y carpetas de trabajo intensivo |
Software de aplicación
| Tipo de aplicación | Parámetros habituales |
|---|---|
| Servidor web (Apache, Nginx, IIS) | Procesos o hilos trabajadores, conexiones máximas, keep-alive, compresión, caché |
| Base de datos (MySQL o MariaDB, PostgreSQL, SQL Server) | Memoria del búfer (innodb_buffer_pool_size, shared_buffers, max server memory), conexiones máximas, índices |
| Aplicaciones Java | Memoria del heap (-Xms, -Xmx), recolector de basura |
| Servidor de ficheros (SMB) | Versión del protocolo (SMB3), firma y cifrado, caché del cliente |
| Aplicaciones de escritorio | Complementos (add-ins) cargados, tamaño de cachés, sincronizaciones en segundo plano |
03Rendimiento de Bases de Datos desde el Punto de Vista del Operador
Muchas quejas de «el programa va lento» terminan en la base de datos. El operador no tiene que ser administrador de bases de datos, pero sí saber reconocer los síntomas, recoger la información y escalar con datos.
| Síntoma | Causa habitual | Qué mirar |
|---|---|---|
| Una pantalla concreta tarda mucho | Consulta lenta, falta de índice | Registro de consultas lentas |
| Todo va lento a la vez con la CPU baja | Bloqueos: una transacción larga retiene filas o tablas | Lista de procesos y bloqueos |
| Errores «Too many connections» | Conexiones que no se cierran o límite bajo | Número de conexiones frente a max_connections |
| Mucha E/S de disco y lentitud general | Búfer de memoria pequeño: lee de disco lo que debería estar en RAM | Tasa de aciertos del búfer |
| Disco de la base de datos lleno | Registros de transacciones (binlog, WAL, .ldf) que crecen sin control | Tamaño de los registros y su política de copia y purga |
04Herramientas de Monitorización y de Medida del Rendimiento del Software
| Herramienta | Plataforma | Para qué |
|---|---|---|
| Administrador de tareas | Windows | Vista rápida de procesos, rendimiento, inicio y servicios |
| Monitor de recursos (resmon) | Windows | Detalle por proceso de CPU, memoria, disco (qué ficheros) y red (qué conexiones) |
| Monitor de rendimiento (perfmon) | Windows | Contadores en tiempo real, registro histórico, alertas e informes |
| Visor de eventos | Windows | Errores y avisos de aplicaciones y servicios |
| Sysinternals (Process Explorer, Process Monitor, RAMMap) | Windows | Análisis profundo de procesos, accesos a registro y ficheros, uso de memoria |
| Windows Performance Recorder / Analyzer | Windows | Trazas muy detalladas (arranque lento, cuelgues) |
| top, htop, atop, glances | Linux | Procesos y recursos en tiempo real |
| vmstat, iostat, mpstat, pidstat, sar (sysstat) | Linux | Estadísticas por recurso y por proceso, con histórico |
| perf, strace | Linux | Perfilado de CPU y llamadas al sistema de un proceso |
| Monitores de aplicación (APM) | Varias | Tiempo de cada operación dentro de la aplicación (Elastic APM, Datadog, New Relic) |
| Plataformas de monitorización | Varias | Zabbix, Prometheus, Checkmk: histórico centralizado y alertas |
05Sysinternals: Herramientas Avanzadas para Windows
Sysinternals es un conjunto gratuito de utilidades de Microsoft para diagnosticar Windows a fondo. No necesitan instalación y se pueden ejecutar desde \\live.sysinternals.com o desde una carpeta de herramientas.
| Herramienta | Para qué sirve | Caso típico |
|---|---|---|
| Process Explorer | Administrador de tareas avanzado: árbol de procesos, DLL, handles, CPU por hilo, verificación de firmas y consulta a VirusTotal | Saber qué proceso tiene bloqueado un fichero o qué servicio hay dentro de un svchost |
| Process Monitor | Registra en tiempo real accesos a ficheros, registro, red y procesos | Averiguar por qué una aplicación falla al arrancar (fichero o clave que no encuentra, acceso denegado) |
| Autoruns | Todo lo que arranca automáticamente: servicios, tareas, claves Run, extensiones, controladores | Arranque lento o sospecha de persistencia de malware |
| RAMMap | Uso detallado de la memoria física | Memoria «ocupada» que no aparece en ningún proceso |
| TCPView | Conexiones de red por proceso | Qué programa está conectado a una IP extraña |
| Sysmon | Registro detallado de actividad en el Visor de eventos | Seguridad y forense (UF1353) |
- Process Monitor sin ahogarse: empieza la captura justo antes de reproducir el problema y detenla justo después; usa filtros (Process Name is app.exe, Result is ACCESS DENIED o NAME NOT FOUND).
- Guardar la captura: en formato PML para enviarla al soporte del fabricante.
- Autoruns con criterio: desmarcar (no borrar) las entradas sospechosas y anotar qué se ha cambiado, para poder deshacerlo.
06El Monitor del Sistema: Conceptos, Interfaz y Configuración
El Monitor de rendimiento de Windows (perfmon.exe, el «Monitor del sistema» de las versiones antiguas) es la herramienta de referencia del programa. Trabaja con tres conceptos:
Objeto
Recurso o componente que se mide: Procesador, Memoria, Disco físico, Interfaz de red, Proceso, Servicio web…
Contador
Valor concreto de un objeto: % de tiempo de procesador, Bytes disponibles, Longitud media de la cola de disco…
Instancia
Elemento concreto cuando hay varios: núcleo 0, disco C:, proceso sqlservr o _Total.
La interfaz
- Herramientas de supervisión → Monitor de rendimiento: gráfico en tiempo real con la barra de herramientas para añadir contadores (+), cambiar la vista (línea, histograma, informe) y congelar la imagen.
- Conjuntos de recopiladores de datos: definidos por el usuario y del sistema (diagnóstico y rendimiento del sistema ya preparados).
- Informes: resultados de cada recopilación, con un resumen y avisos.
- Monitor de confiabilidad (perfmon /rel): historial de fallos de aplicaciones, actualizaciones e incidencias, con un índice de estabilidad del 1 al 10.
Configuración del monitor
- Añadir contadores: botón + → elegir el equipo (local o remoto), el objeto, el contador y la instancia; la casilla «Mostrar descripción» explica cada contador.
- Intervalo de muestreo: Propiedades → General; 1 s para un problema puntual, 15-60 s para registrar horas o días.
- Escala: ajustarla para que los contadores con valores muy distintos se vean juntos.
- Guardar la configuración: como plantilla de conjunto de recopiladores para reutilizarla en otros equipos.
07Registros y Alertas de Rendimiento
Registros (conjuntos de recopiladores de datos)
- Contador de rendimiento: guarda los valores de los contadores elegidos en un fichero .blg (binario), .csv o en SQL.
- Seguimiento de eventos (ETW): registra eventos detallados de proveedores del sistema.
- Información de configuración: guarda claves del registro y datos del sistema en ese momento.
- Se puede programar el inicio y la parada, el tamaño máximo y que se cree un fichero nuevo cada día.
Alertas de rendimiento
Una alerta es un conjunto de recopiladores que vigila un contador y, cuando supera un umbral, registra un evento en el registro de aplicaciones, inicia otro recopilador o ejecuta una tarea programada (por ejemplo, un script que envía un correo).
08Utilidades de Supervisión del Rendimiento desde la Línea de Comandos
| Necesidad | Windows | Linux |
|---|---|---|
| Procesos que más consumen | Get-Process | Sort CPU -Desc | Select -First 10 · tasklist /v | top · htop · ps aux --sort=-%cpu | head |
| Uso de CPU en el tiempo | typeperf "\Processor(_Total)\% Processor Time" -si 2 -sc 10 | mpstat 2 10 · sar -u 2 10 |
| Memoria | Get-Counter '\Memory\Available MBytes' · systeminfo | free -h · vmstat 2 10 |
| Disco | Get-Counter '\PhysicalDisk(*)\Avg. Disk Queue Length' | iostat -xz 2 · iotop |
| Red y conexiones | netstat -ano · Get-NetTCPConnection · Get-Counter '\Network Interface(*)\Bytes Total/sec' | ss -tunap · sar -n DEV 2 · iftop · nethogs |
| Por proceso concreto | Get-Counter '\Process(sqlservr)\% Processor Time' | pidstat -p PID 2 · top -p PID |
| Servicios | Get-Service · sc queryex | systemctl status · systemd-cgtop |
09Análisis del Registro de un Servidor Web
El registro de acceso de un servidor web es una fuente de métricas de primera: cuántas peticiones hay, cuáles fallan y cuánto tardan. Para tener el tiempo de cada petición hay que añadirlo al formato del registro.
| Código | Significado | Lectura para el operador |
|---|---|---|
| 2xx | Correcto | Normal |
| 3xx | Redirección | Normal en pequeña proporción |
| 401 / 403 | No autenticado / prohibido | Muchos desde la misma IP: posible ataque (UF1353) |
| 404 | No encontrado | Enlaces rotos o escaneos |
| 500 | Error interno de la aplicación | Revisar el registro de errores de la aplicación |
| 502 / 503 / 504 | Pasarela errónea / servicio no disponible / tiempo agotado | El servidor de aplicación o la base de datos no responde o está saturado |
10Procedimiento de Medida del Rendimiento
- 1. Definir el objetivo: qué se quiere saber (¿por qué va lento el ERP a primera hora?) y qué componentes y aspectos se van a supervisar.
- 2. Configurar la supervisión: elegir los contadores, el intervalo, el formato y el lugar donde se guardan los datos, preferiblemente en un disco distinto del que se mide.
- 3. Método: supervisión en tiempo real para un problema que está ocurriendo; registro histórico para problemas intermitentes y para la línea base; comparativa antes y después para cambios.
- 4. Frecuencia: intervalos cortos (1-5 s) durante poco tiempo para problemas puntuales; intervalos de 15-60 s durante días o semanas para tendencias y líneas base.
- 5. Registro de los datos: guardar con nombre, equipo, fecha y descripción de lo que pasaba (carga normal, cierre de mes, tras la actualización).
- 6. Análisis y conclusiones: comparar con la línea base, buscar correlaciones y redactar el informe.
| Componente | Aspectos a supervisar |
|---|---|
| Sistema operativo | CPU, memoria, paginación, disco, red, número de procesos e hilos |
| Servicios del SO | Estado, reinicios, consumo de cada servicio |
| Servidor web | Peticiones por segundo, tiempo de respuesta, errores, conexiones |
| Base de datos | Consultas por segundo, consultas lentas, bloqueos, uso del búfer, conexiones |
| Aplicación de negocio | Tiempo de las operaciones clave, usuarios conectados, errores en su log |
11Selección de Contadores Adecuados de Supervisión
| Objeto \ Contador (Windows) | Valor preocupante orientativo | Indica |
|---|---|---|
| Processor(_Total) \ % Processor Time | > 85 % sostenido | CPU saturada |
| System \ Processor Queue Length | > 2 por núcleo sostenido | Hilos esperando CPU |
| Memory \ Available MBytes | < 10 % de la RAM | Falta de memoria |
| Memory \ Pages/sec | Muy alto y sostenido junto con poca memoria disponible | Paginación excesiva |
| Memory \ Committed Bytes frente a Commit Limit | Cerca del límite | La memoria virtual se agota |
| Process(X) \ Private Bytes o Working Set | Crece sin parar durante días | Posible fuga de memoria |
| PhysicalDisk \ Avg. Disk sec/Read y /Write | > 0,020 s en HDD, > 0,005 s en SSD | Disco lento o saturado |
| PhysicalDisk \ % Idle Time | < 20 % | Disco ocupado casi siempre |
| LogicalDisk \ % Free Space | < 15 % | Riesgo de llenado |
| Network Interface \ Bytes Total/sec | > 70 % del ancho de banda | Red saturada |
| Network Interface \ Output Queue Length | > 2 | Congestión en la tarjeta |
| Process(X) \ Handle Count / Thread Count | Crece sin parar | Fuga de recursos en la aplicación |
Equivalencias en Linux: %us, %sy y %wa de top o mpstat (el %wa alto indica espera de E/S), available de free, si/so de vmstat (swap), await y %util de iostat, y los contadores de red de sar -n DEV y EDEV.
12Problemas de Rendimiento Típicos y Estrategias de Optimización
| Problema | Síntomas en los contadores | Estrategias |
|---|---|---|
| Fuga de memoria | Private Bytes de un proceso crece hasta agotar la RAM; mejora al reiniciar el servicio | Actualizar la aplicación; reinicio programado como solución temporal; abrir un problema con el fabricante |
| CPU al 100 % por un proceso | Un solo proceso en lo alto de la lista | Identificar qué hace (Process Explorer, perf); actualizar; reducir prioridad; revisar tareas programadas |
| Cuello de botella de disco | Latencias altas, cola larga, %wa alto | Mover a SSD, separar datos y logs, revisar antivirus, añadir RAM como caché |
| Poca memoria y paginación | Available bajo y Pages/sec alto | Añadir RAM, limitar la memoria de bases de datos o de la JVM, cerrar servicios innecesarios |
| Arranque lento | Muchos programas de inicio, servicios lentos | Administrador de tareas → Inicio, Autoruns, Windows Performance Analyzer |
| Red lenta para una aplicación | Latencia alta, retransmisiones | Medir con iperf3, revisar dúplex, MTU y SMB; acercar el servidor |
| Bloqueos de base de datos | Esperas altas con poca CPU | Revisar consultas lentas e índices con el administrador de BD |
Prueba de equipos y resolución de problemas
- Reproducir: conseguir que el problema ocurra de forma controlada.
- Aislar: probar en otro equipo, con otro usuario, sin complementos, en modo seguro o con un inicio limpio (msconfig).
- Medir: con los contadores adecuados, durante el problema.
- Corregir: un cambio cada vez.
- Verificar: repetir la medida y compararla con la línea base.
- Documentar: en el tique y en la base de conocimiento.
13Rendimiento en Entornos Virtualizados
La mayoría de los servidores actuales son máquinas virtuales. Dentro de una VM, los contadores pueden engañar: la VM cree tener 4 CPU y 16 GB, pero comparte el hardware real con otras VM. Hay que mirar también desde el hipervisor.
| Fenómeno | Qué ocurre | Dónde se ve | Solución |
|---|---|---|---|
| Sobreasignación de CPU (overcommit) | Se reparten más vCPU que núcleos físicos; las VM esperan turno | CPU Ready (VMware) o steal time (%st en top de Linux) alto | Repartir VM entre hosts, quitar vCPU sobrantes |
| Demasiadas vCPU en una VM | La VM espera a tener libres a la vez todos sus núcleos virtuales | CPU Ready alto aunque el uso de CPU sea bajo | Ajustar el número de vCPU a lo que realmente usa |
| Sobreasignación de memoria | El hipervisor recupera memoria con ballooning o la pasa a disco (swap del host) | Contadores de balloon y swap del hipervisor | Reservas de memoria para VM críticas, más RAM en el host |
| Contención de almacenamiento | Varias VM comparten el mismo almacén y una lo satura (vecino ruidoso) | Latencia del almacén en el hipervisor | Límites de IOPS, mover la VM, almacenamiento más rápido |
| Instantáneas olvidadas | Cada escritura va a un fichero delta que crece; el rendimiento baja | Lista de instantáneas de la VM | Consolidar o borrar las instantáneas tras usarlas |
| Herramientas de integración desactualizadas | Controladores de disco y red virtuales lentos | Versión de VMware Tools, Hyper-V Integration Services o qemu-guest-agent | Actualizarlas |
14Supervisión de Memoria, Procesador, Disco, Red y Servicios
Uso de la memoria
Memoria disponible, comprometida, caché, paginación y memoria por proceso; vigilar las tendencias de crecimiento.
Actividad del procesador
% total y por núcleo, tiempo de usuario frente a privilegiado (núcleo), cola, interrupciones por segundo.
Actividad del disco
Latencia de lectura y escritura, IOPS, cola, % de inactividad, espacio libre.
Actividad de la red
Bytes por segundo, errores, descartes, conexiones TCP establecidas y en espera.
Servicios del SO
Estado (en ejecución o detenido), tipo de inicio, reinicios inesperados (eventos 7031 y 7034 del Administrador de control de servicios).
15Caso Práctico Resuelto: la Intranet Lenta de los Lunes
Cada lunes entre las 9:00 y las 10:30, los 150 usuarios de un ayuntamiento se quejan de que la intranet (Apache + PHP + MariaDB, en una VM Linux con 4 vCPU y 8 GB) tarda «muchísimo». El resto de la semana va bien.
| Paso | Medida o comprobación | Resultado |
|---|---|---|
| 1. Datos objetivos | Análisis del access.log: p95 del tiempo de respuesta por hora | Lunes 9-10:30: p95 de 7,8 s; resto de días: 0,4 s |
| 2. Recursos de la VM | sar del lunes anterior (histórico) | CPU 35 %, memoria disponible 3 GB, %wa del 45 %: mucha espera de disco |
| 3. ¿Quién usa el disco? | iotop y pidstat -d en la siguiente franja del lunes | mysqld escribe de forma continua |
| 4. Base de datos | SHOW FULL PROCESSLIST y registro de consultas lentas | Consulta del tablón de anuncios sin índice que recorre 2 millones de filas; se lanza cada vez que alguien abre la portada |
| 5. ¿Por qué los lunes? | Correlación con el calendario | Todos abren la portada a primera hora del lunes para ver los avisos del fin de semana |
- Solución temporal: el equipo de desarrollo activa la caché de la portada durante 5 minutos.
- Solución definitiva (cambio normal aprobado): índice en la tabla de avisos y paginación del tablón.
- Verificación: el lunes siguiente, p95 de 0,5 s y %wa por debajo del 5 %.
- Mejora de la monitorización: nuevo elemento con el p95 del tiempo de respuesta de la intranet y alarma si supera 2 s durante 10 minutos.
16Mantenimiento Remoto: Herramientas y Configuración
| Herramienta | Uso en la supervisión del rendimiento | Configuración necesaria |
|---|---|---|
| Perfmon contra un equipo remoto | Añadir contadores de \\SERVIDOR | Usuario en el grupo «Usuarios del monitor de rendimiento» y reglas del cortafuegos para el registro remoto |
| PowerShell Remoting | Invoke-Command para lanzar Get-Counter en muchos equipos | Enable-PSRemoting; WinRM (TCP 5985/5986) |
| Windows Admin Center | Paneles de rendimiento, servicios, eventos y procesos por web | Instalación en un servidor de gestión; HTTPS |
| SSH | Ejecutar top, iostat, sar en remoto | Claves SSH, usuario sin privilegios con sudo limitado |
| Cockpit (Linux) | Panel web de rendimiento, servicios y registros | Paquete cockpit; puerto 9090 |
| Agentes de monitorización | Histórico centralizado y alertas | Agente y cortafuegos (ver UF1350) |
17Glosario de la Parte I
- Objeto / contador / instancia
- Recurso medido / valor concreto / elemento concreto cuando hay varios (Monitor de rendimiento).
- Conjunto de recopiladores
- Configuración de perfmon que registra contadores, eventos o configuración.
- Alerta de rendimiento
- Acción que se ejecuta cuando un contador supera un umbral.
- logman / relog / typeperf
- Órdenes de Windows para crear registros de rendimiento, convertirlos y consultarlos.
- sysstat (sar, iostat, mpstat, pidstat)
- Paquete de Linux para medir recursos e histórico.
- %wa / iowait
- Porcentaje de tiempo en que la CPU espera a operaciones de E/S.
- Fuga de memoria
- Memoria que un programa reserva y nunca libera.
- Steal time / CPU Ready
- Tiempo en que una VM quiere CPU y el hipervisor no se la da.
- Consulta lenta
- Consulta de base de datos que supera un tiempo umbral y se registra.
- Bloqueo (lock)
- Reserva de datos por una transacción que obliga a esperar a otras.
- Inicio limpio
- Arranque de Windows con los mínimos servicios y programas para aislar problemas.
- Efecto observador
- Carga que añade la propia medición al sistema.