Análisis de carga del servidor

Cómo monitorizar el uso de CPU, memoria, disco y red en un servidor Linux.

La carga del servidor hace referencia al porcentaje de uso de los recursos clave: CPU, RAM y espacio en disco. Monitorizar estas métricas permite identificar rápidamente la causa de los problemas de rendimiento.

El hardware de un servidor se divide en cuatro componentes principales: CPU, memoria, disco e interfaz de red. El análisis de carga consiste en recopilar e interpretar las estadísticas de cada uno de ellos.

CPU

La utilidad top ofrece una vista básica en tiempo real del uso de la CPU:

top

Ejemplo de salida:

top - 13:29:39 up 7 days,  1:10,  1 user,  load average: 0.03, 0.03, 0.00
Tasks: 104 total,   2 running, 102 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.3 us,  1.0 sy,  0.0 ni, 97.0 id,  0.0 wa,  0.0 hi,  1.3 si,  0.3 st
MiB Mem :    969.5 total,     68.8 free,    635.9 used,    264.8 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    106.7 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
    823 mysql     20   0 1852008 401812      0 S   1.0  40.5  81:24.20 mysqld
     13 root      20   0       0      0      0 R   0.3   0.0  26:11.00 rcu_sched
    695 redis     20   0   66776   4216   2100 S   0.3   0.4  19:55.21 redis-server

Métricas clave a vigilar:

  • us — tiempo de CPU consumido por procesos de usuario. Un valor alto indica que tu aplicación está ejerciendo presión sobre la CPU.
  • id — tiempo de inactividad de la CPU. En condiciones normales debe mantenerse entre el 80 y el 100 %.
  • wa — tiempo de espera de operaciones de E/S. Un valor alto apunta a una sobrecarga del subsistema de disco.

Si us supera el 20 % de forma constante, considera optimizar tu aplicación o escalar los recursos.

Para estadísticas por núcleo, instala mpstat desde el paquete sysstat:

apt-get install sysstat
mpstat -P ALL

Ejemplo de salida:

Linux 5.15.0-46-generic (dsde1139-22869.fornex.org)    09/06/2022  _x86_64_   (1 CPU)

02:37:21 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
02:37:21 PM  all    0.90    0.00    0.74    0.13    0.00    0.96    0.32    0.00    0.00   96.95
02:37:21 PM    0    0.90    0.00    0.74    0.13    0.00    0.96    0.32    0.00    0.00   96.95

Para una vista más visual, htop muestra la carga de la CPU en un formato fácil de leer:

apt-get install htop
htop

htop Monitorización de la CPU en htop

Memoria

Usa el comando free para comprobar el uso de la RAM:

free

Ejemplo de salida:

               total        used        free      shared  buff/cache   available
Mem:          992724      655200       73968       86748      263556      104972
Swap:              0           0           0

Presta especial atención a Swap — indica cuánto espacio en disco se está usando como memoria de desbordamiento cuando la RAM se agota. Un nivel bajo de RAM libre por sí solo no es crítico, pero un Swap en crecimiento requiere acción inmediata: añade más memoria o distribuye la carga entre varios servidores.

Para un análisis detallado del uso de memoria:

cat /proc/meminfo

Ejemplo de salida:

MemTotal:         992724 kB
MemFree:           73192 kB
MemAvailable:     104864 kB
Buffers:           10856 kB
Cached:           226868 kB
SwapCached:            0 kB
...

Disco

Empieza comprobando el espacio en disco disponible:

df -h

Ejemplo de salida:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs            97M  732K   97M   1% /run
/dev/vda1       9.8G  8.5G  846M  92% /
tmpfs           485M     0  485M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            97M     0   97M   0% /run/user/0

La columna Use% muestra qué porcentaje de espacio está ocupado en cada partición.

Para monitorizar la actividad de lectura/escritura desglosada por proceso, usa iotop:

apt-get install iotop
iotop

Ejemplo de salida:

Total DISK READ:         0.00 B/s | Total DISK WRITE:         0.00 B/s
Current DISK READ:       0.00 B/s | Current DISK WRITE:       0.00 B/s
    TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
      1 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  init
      2 be/4 root        0.00 B/s    0.00 B/s  ?unavailable?  [kthreadd]
    ...

Métricas clave:

  • Actual DISK READ — datos efectivamente leídos del disco (teniendo en cuenta la caché).
  • Actual DISK WRITE — datos efectivamente escritos en el disco.

Recomendaciones ante una carga de disco elevada:

  • Alta carga de lectura desde la aplicación — activa el caché APC.
  • Alta carga de lectura desde la base de datos — revisa la configuración de tu base de datos.
  • Alta carga de lectura desde el servidor web — considera implementar caché HTTP.
  • Alta carga de escritura — asegúrate de que los logs de acceso y depuración estén desactivados; la base de datos o las subidas de archivos son los culpables más probables.

Red

La utilidad cbm muestra el tráfico de red en tiempo real por interfaz:

apt-get install cbm
cbm

Ejemplo de salida:

Interface      Receive          Transmit         Total
lo             0.00 B/s         0.00 B/s         0.00 B/s
eth0           35.90 kB/s       758.75 B/s       36.65 kB/s

Un tráfico de red elevado no es un problema en sí mismo, pero valores sostenidos cercanos al pico son una señal para empezar a planificar la escalabilidad.

Estadísticas combinadas

La utilidad dstat muestra un resumen en tiempo real de todos los subsistemas, actualizado cada segundo:

apt-get install dstat
dstat

Ejemplo de salida:

--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw
  2   1  97   0   0|  35k   29k|   0     0 |   0     0 | 683   702
  1   0  99   0   0| 124k    0 |  39k 1162B|   0     0 |1003   822
  3   4  86   6   1|3580k 8776k|  37k  522B|   0     0 |1161  1018

Columnas clave:

  • total-cpu-usage — carga de la CPU.
  • dsk/total — actividad del disco.
  • net/total — actividad de red.

Ayuda

¿Tienes dudas o necesitas ayuda? Escríbenos a través del sistema de tickets — siempre estamos aquí para ayudarte!

¿Necesitas ayuda?Nuestros ingenieros te ayudarán gratuitamente con cualquier pregunta en minutosContáctanos