> La lista completa de artículos está en [llms.txt](https://docs.f3cloud.com/llms.txt). Cada página tiene versión en Markdown, basta con añadir .md a su dirección. Esta página en Markdown: [https://docs.f3cloud.com/es/linux/linux-processes.md](https://docs.f3cloud.com/es/linux/linux-processes.md).

# Procesos y carga en Linux – los comandos top, htop, ps y kill

Cómo ver los procesos y la carga en un servidor Linux. Qué es el load average y cómo leerlo, los comandos top, htop y ps, cómo encontrar el proceso que carga el procesador o la memoria y cómo terminar procesos con los comandos kill y pkill. Probado en Debian 12.

De repente el servidor empieza a responder despacio, el sitio web carga una vez sí y otra no, y las gráficas del área de cliente muestran el procesador al máximo. Para entender qué pasa, hay que ver qué programas se están ejecutando ahora mismo y cuántos recursos consumen. En este artículo vemos qué significa la carga del servidor y cómo leer el load average, aprendemos a usar los comandos `top`, `htop` y `ps`, encontramos el proceso que carga el sistema y lo terminamos. Para que se vea mejor, cargamos un servidor de pruebas de 4 núcleos con dos procesos, cada uno de los cuales ocupaba un núcleo entero, y todas las capturas de pantalla se hicieron en ese momento.

***

## Qué es un proceso y cómo leer la carga

Cada programa en marcha en Linux funciona como un **proceso**. Un proceso tiene un número **PID**, un usuario con el que se ejecuta y un estado. La mayor parte del tiempo casi todos los procesos del servidor están dormidos. El servidor web espera nuevas conexiones, la base de datos espera consultas, y en ese momento no necesitan el procesador. Solo ocupan el procesador los procesos en estado **R** (running), que están calculando algo ahora mismo o esperan en la cola para hacerlo. Precisamente su número es la base del indicador de carga más conocido.

Este indicador se llama **load average** y se muestra con tres números, por ejemplo `2.24, 1.03, 0.50`. Es la longitud media de la cola de procesos que necesitan el procesador en los últimos 1, 5 y 15 minutos. Linux les suma además los procesos que esperan a que termine una operación con el disco y no se pueden interrumpir, por eso el load average también sube cuando el disco es lento, aunque el procesador esté libre. El load average por sí solo no dice nada hasta que lo comparas con el número de núcleos. Supongamos que el servidor tiene 4 núcleos. Una carga de 2 significa que de media trabajaban dos procesos y la mitad de los núcleos estaba ociosa. Una carga de 4 significa que todos los núcleos están ocupados por completo, y una carga de 8 significa que a cada núcleo le tocan dos aspirantes y los procesos hacen cola, así que todo empieza a responder más despacio. En nuestro servidor de pruebas, dos procesos que ocupaban un núcleo cada uno dieron al cabo de un par de minutos un load average de 2,24 con 4 núcleos.

Conviene leer los tres números juntos, porque muestran la tendencia. Si el primero es bastante mayor que el tercero, la carga ha subido hace poco y quizá siga subiendo. Si el primero es menor que el tercero, el pico ya ha pasado. El número de núcleos del servidor lo muestra el comando `nproc`.

Además de la carga, el procesador tiene un desglose del tiempo que muestra `top`. El valor **us** es el tiempo dedicado a los programas, **sy** el dedicado al trabajo del kernel del sistema, **id** es el tiempo inactivo y **wa** la espera del disco. En un servidor virtual también importa el indicador **st** (steal). Muestra la parte del tiempo en que el servidor estaba listo para trabajar, pero el procesador físico estaba ocupado con otras tareas. En nuestro servidor de pruebas era cero.

***

## 1. Mira la carga general

La comprobación más rápida es el comando `uptime`. Muestra cuánto tiempo lleva funcionando el servidor sin reiniciarse y los tres números del load average.

```bash
uptime
nproc
```

Compara el primer número del load average con el número de núcleos que muestra `nproc`. Si la carga es bastante mayor, busca quién la genera.

***

## 2. Encuentra el proceso en top

El comando `top` está en cualquier servidor y muestra los procesos en tiempo real. El parámetro `-o %CPU` los ordena por uso del procesador.

```bash
top -o %CPU
```

<figure><img src="https://docs.f3cloud.com/img/linux-top.png" alt="Salida de top con el load average, el uso del procesador y dos procesos yes que ocupan el 100 por ciento cada uno"><figcaption><p>Arriba la carga general, debajo los procesos, primero los que más consumen</p></figcaption></figure>

En la parte superior se ven el load average, el número de procesos, el desglose del tiempo del procesador y la memoria. En la tabla de abajo lo más interesante son unas cuantas columnas.

* **PID** es el número del proceso, lo necesitarás para terminarlo.
* **USER** muestra con qué usuario se ejecuta el proceso.
* **%CPU** es el uso del procesador. 100 % significa un núcleo entero, así que en un servidor con varios núcleos un proceso puede mostrar incluso más.
* **RES** muestra cuánta memoria RAM ocupa realmente el proceso.
* **COMMAND** es el nombre del programa.

Mientras `top` está abierto, la tecla <kbd>M</kbd> ordena los procesos por memoria, <kbd>P</kbd> de nuevo por procesador y <kbd>q</kbd> cierra el programa.

***

## 3. Instala htop

`htop` muestra lo mismo, pero de forma más clara, con barras de colores para cada núcleo y para la memoria. En nuestros servidores con Debian 12 no viene instalado por defecto, así que instálalo.

```bash
apt install -y htop
htop
```

<figure><img src="https://docs.f3cloud.com/img/linux-htop.png" alt="Ventana de htop con las barras de uso de cuatro núcleos, la memoria, el swap y la lista de procesos"><figcaption><p>Dos núcleos cargados por completo, dos casi libres</p></figcaption></figure>

En `htop` puedes seleccionar los procesos con las flechas. La tecla <kbd>F6</kbd> elige la columna por la que ordenar, <kbd>F9</kbd> termina el proceso seleccionado, <kbd>F5</kbd> muestra los procesos en forma de árbol y <kbd>F10</kbd> o <kbd>q</kbd> cierra el programa. Si trabajas con Termius en el móvil, donde no hay teclas F, pulsa los rótulos de la parte inferior de la pantalla.

***

## 4. Obtén la lista de procesos con ps

`top` y `htop` son cómodos para observar, pero para buscar y para los scripts es mejor `ps`. Muestra la lista una sola vez y termina.

```bash
# Los cinco procesos que más cargan el procesador
ps aux --sort=-%cpu | head -6

# Lo mismo por memoria ocupada
ps aux --sort=-%mem | head -6

# Buscar un proceso por nombre y mostrar su PID
pgrep -a nginx
```

***

## 5. Termina el proceso

Cuando hayas encontrado al culpable, puedes terminarlo por su número PID o por su nombre.

```bash
# Pedir amablemente al proceso que termine
kill 225145

# Terminar todos los procesos con ese nombre
pkill yes
```

<figure><img src="https://docs.f3cloud.com/img/linux-kill.png" alt="Búsqueda de procesos con los comandos ps y pgrep y su terminación con los comandos kill y pkill"><figcaption><p>Los procesos se han encontrado por nombre y se han terminado</p></figcaption></figure>

El comando `kill` sin parámetros envía al proceso la señal **TERM**. Al recibirla, el programa puede guardar los datos, cerrar los archivos y salir por sí mismo. Si el proceso no responde, usa la señal **KILL**, que el sistema ejecuta a la fuerza sin preguntar al programa.

```bash
kill -9 225145
```

> **Primero un kill normal.**
>
> `kill -9` no deja que el programa guarde los datos, así que una base de datos o un sitio web pueden perder los últimos cambios tras una terminación así. Úsalo solo cuando el `kill` normal no haya funcionado. Los servicios, por ejemplo Nginx o MySQL, es mejor reiniciarlos con el comando `systemctl restart` en lugar de terminarlos a mano.

***

## Preguntas frecuentes

<details>

<summary>La carga es alta, pero en top no hay procesos con un %CPU alto</summary>

Mira el valor **wa** en la línea `%Cpu(s)`. Si es alto, los procesos esperan al disco y no al procesador, y el load average sube por ellos. Para saber qué proceso lee y escribe más, te ayudará la pestaña **I/O** de `htop` o el programa `iotop`, que se instala con el comando `apt install -y iotop`.

</details>

<details>

<summary>El proceso terminó, pero al cabo de un minuto volvió a aparecer</summary>

Lo más probable es que sea un servicio que el sistema reinicia automáticamente o una tarea que lanza cron. Averigua a qué servicio pertenece el proceso con el comando `systemctl status PID` y detén el propio servicio.

</details>

<details>

<summary>Qué es un zombie en la salida de top</summary>

Es un proceso que ya ha terminado, pero cuyo proceso padre todavía no ha recogido su código de salida. Un zombie no ocupa memoria ni procesador y normalmente desaparece solo. Si cada vez hay más procesos de este tipo, el problema está en el programa padre, y reiniciarlo ayuda.

</details>

<details>

<summary>El servidor está sobrecargado de forma constante</summary>

Si el procesador o la memoria están siempre ocupados por el trabajo normal de tus programas, al servidor le faltan recursos. Con la memoria puede ayudar un [archivo de intercambio](https://docs.f3cloud.com/es/linux/swap-linux.md), pero es más fiable pasar a un plan más potente. Cómo hacerlo se explica en las [preguntas frecuentes](https://docs.f3cloud.com/es/client-area/frequently-asked-questions.md).

</details>

***

## Nuestros recursos

**Canal de Telegram:** [https://t.me/f3cloud_news](https://t.me/f3cloud_news)\
**Web del hosting:** [https://f3cloud.com](https://f3cloud.com/es)
