Averiguar la carga de un servidor GNU/Linux usando comandos básicos (y de toda la vida)

Tanto si administras uno o varios servidores GNU/Linux como si eres nuevo en este mundo, alguna vez te preguntarán o te preguntarás si los recursos de tu servidor son suficientes.

Generalmente, cuando hablamos de recursos nos referimos a tres: Número de CPU’s (o vCores o Núcleos), cantidad de memoria RAM (en GB) y espacio en disco (en GB), que puede ser mecánico o sólido (mimimi, il sílidi ni is in disci).

Entonces llegará el momento de ver el estado de carga del servidor y tendrás que revisar todos estos recursos. Para ello existen diferentes comandos para revisar cada uno de ellos.

En este tutorial, vamos a hacer un repaso a algunos comandos y vamos a explicar el significado de sus salidas.

Analizando el estado del servidor

El primer comando para saber el estado del servidor es nuestro amigo y gran conocido top .

top

Este comando nos mostrará en tiempo real el estado del servidor, el estado de la CPU, de la RAM y un listado de procesos:

Resultado del comando top

Y para explicar un poco como funciona este comando, vamos a ir explicando línea por línea:

top - 12:20:42 up 1 day, 1:26, 1 user, load average: 3.29, 3.35, 6.17

En esta primera línea nos muestra la información separada por comas, la primera el nombre de comando seguido de la hora actual del sistema y del uptime del servidor. Es decir, el tiempo que lleva activo.

Luego el número de usuarios conectados al servidor (1 usuario). A continuación aparece el Promedio de carga (load average). Esto es interesante:

Los tres valores que aparecen, son los tiempos de carga hace 1 minuto, 5 minutos y 15 minutos respectivamente. Es decir, hace 15 minutos, el servidor estaba con un tiempo de carga de 6.17.

Para entender el significado de ese valor, vamos a imaginar que un procesador es como un parking de coches y los procesos son esos coches. Si el parking se encuentra medio llego, el promedio de carga será de 0.5. Si se encuentra completo, entonces el promedio de carga será de 1.0.

Si este promedio se encuentra por encima de 1.0 significará que hay procesos en cola.

Este ejemplo sería para un servidor con un sólo núcleo, pero el servidor de ejemplo que he puesto (la imagen del top) es un servidor con 16 núcleos.

Podemos saber cuantos núcleos tiene nuestro servidor si ejecutamos el siguiente comando:

grep 'model name' /proc/cpuinfo | wc -l

Cada núcleo soporta 1.0 de load average, si tienes más de una CPU, tendrás que sumar cada núcleo de cada CPU.

Es decir, mi servidor soporta hasta 16.0 de promedio de carga del servidor y cuando el promedio de carga estaba a 6.17 podemos decir que el estado del servidor o la carga estaba al 38,6% de su total.

Sigamos con el resto del comando, la segunda línea:

Tasks: 11714 total, 3 running, 11711 sleeping, 0 stopped, 0 zombie

Esta línea muestra el total de tareas y procesos (en sus diferentes estados). Los estados son los siguientes:

Running : Este estado indica los procesos que se están ejecutando actualmente o preparados para ejecutarse.

: Este estado indica los procesos que se están ejecutando actualmente o preparados para ejecutarse. Sleeping : Procesos dormidos que están esperando a que ocurra algo para ejecutarse.

: Procesos dormidos que están esperando a que ocurra algo para ejecutarse. Stopped : Procesos que su ejecución ha sido detenida.

: Procesos que su ejecución ha sido detenida. Zombie: Cuando el proceso padre que ha iniciado otros procesos muere, generalmente los procesos hijos quedan «colgados» y quedan en estado zombie.

%Cpu(s): 3.5 us, 4.2 sy, 0.4 ni, 91.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

La tercera línea nos da información sobre las CPU’s de nuestro servidor, y cada valor tiene un significado:

us (User/Usuario) : tiempo de CPU de usuario.

: tiempo de CPU de usuario. sy (System/Sistema) : tiempo de CPU del kernel.

: tiempo de CPU del kernel. id (Inactive/Inactivo) : tiempo de CPU en procesos inactivos.

: tiempo de CPU en procesos inactivos. wa (Wait/En espera) : tiempo de CPU en procesos en espera.

: tiempo de CPU en procesos en espera. hi (Hardware Interruption/interrupciones de Hardware) : interrupciones de hardware.

: interrupciones de hardware. si (Software Interruption/Interrupciones de Software): tiempo de CPU en interrupciones de software.

A continuación vienen dos líneas sobre la memoria RAM, tanto física como virtual:

KiB Mem : 38970312 total, 2095740 free, 12145800 used, 24728772 buff/cache

Memoria total (38GB)

Memoria utilizada (20GB)

Memoria libre (12GB)

Memoria utilizada por buffer (24GB)

KiB Swap: 16777184 total, 16777184 free, 0 used. 13208764 avail Mem

Memoria total (tamaño de la memoria SWAP)

Memoria libre (SWAP libre)

Memoria usada (SWAP usándose)

Memoria en caché.

Y luego el resto del comando, con sus columnas:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1720852 XXXXXX 20 0 512500 34216 18356 S 40.2 0.1 0:02.22 sw-engine-fpm 5693 mysql 20 0 2155792 252724 6292 S 15.2 0.6 33:54.20 mysqld 1124023 XXXXXX 20 0 0 0 0 Z 14.4 0.0 4:45.17 php-cgi 1720833 XXXXXX 20 0 573736 48864 29220 R 14.1 0.1 0:01.18 php-fpm 1719297 root 20 0 174444 14664 1616 R 13.8 0.0 0:07.70 top

PID : es el identificador de proceso. Cada proceso tiene un identificador único.

: es el identificador de proceso. Cada proceso tiene un identificador único. USER (USUARIO) : usuario propietario del proceso.

: usuario propietario del proceso. PR : prioridad del proceso. Si pone RT es que se está ejecutando en tiempo real.

: prioridad del proceso. Si pone RT es que se está ejecutando en tiempo real. NI : asigna la prioridad. Si tiene un valor bajo (hasta -20) quiere decir que tiene más prioridad que otro con valor alto (hasta 19).

: asigna la prioridad. Si tiene un valor bajo (hasta -20) quiere decir que tiene más prioridad que otro con valor alto (hasta 19). VIRT : cantidad de memoria virtual utilizada por el proceso.

: cantidad de memoria virtual utilizada por el proceso. RES : cantidad de memoria RAM física que utiliza el proceso.

: cantidad de memoria RAM física que utiliza el proceso. SHR : memoria compartida.

: memoria compartida. S (ESTADO) : estado del proceso ( S para sleeping, R para running, Z para zombie…).

: estado del proceso ( para sleeping, para running, para zombie…). %CPU : porcentaje de CPU utilizado desde la última actualización.

: porcentaje de CPU utilizado desde la última actualización. %MEM : porcentaje de memoria física utilizada por el proceso desde la última actualización.

: porcentaje de memoria física utilizada por el proceso desde la última actualización. TIME+ (HORA+) : tiempo total de CPU que ha usado el proceso desde su inicio.

: tiempo de CPU que ha usado el proceso desde su inicio. COMMAND: comando utilizado para iniciar el proceso.

También podemos revisar la memoria RAM con comandos como free, pero para eso os dejo este otro artículo 5 comandos para controlar la memoria en GNU/Linux.