CPU Limit · 6 min read · Sep 19, 2025

Cómo limitar el uso de CPU con CPULimit en Ubuntu Linux

El comando cpulimit está diseñado para restringir el uso de CPU de un proceso específico en Linux, asegurando que no exceda un umbral definido. Esto puede ser particularmente útil para gestionar los recursos del sistema y prevenir que un solo proceso monopolice el tiempo de CPU, lo que podría degradar el rendimiento general del sistema. Al especificar el límite de uso de CPU deseado como un porcentaje, los usuarios pueden aplicar restricciones a los procesos en ejecución o iniciar nuevos bajo un consumo controlado de CPU. La herramienta envía señales SIGSTOP y SIGCONT al proceso objetivo, pausándolo y reanudándolo para mantener el límite de uso establecido.

1 Nota Preliminar

Este tutorial ha sido probado en Ubuntu 24.04, pero también funciona en versiones anteriores de Ubuntu.

2 Instalación de CPULimit

Primero, necesitamos instalar cpulimit de la siguiente manera:

sudo apt update  
sudo apt install cpulimit

3 Limitando el uso de CPU

Ahora, verificaremos la utilidad para limitar el uso de CPU. Para esto, primero revisaremos el uso de CPU sin CPUlimit y luego implementaremos CPUlimit para evaluarlo. Aclarémoslo con un ejemplo.

  1. Aquí hay un ejemplo de cómo utilizar tu CPU con una aplicación en CPU de un solo núcleo:
dd if=/dev/zero of=/dev/null &

Luego, verificaremos el uso de CPU con el comando:

top
top - 11:24:18 up 49 min,  1 user,  load average: 0.94, 1.02, 1.79  
Tasks: 249 total,   2 running, 247 sleeping,   0 stopped,   0 zombie  
%Cpu(s): 13.4 us, 11.6 sy,  0.0 ni, 74.9 id,  0.0 wa,  0.1 hi,  0.0 si,  0.0 st  
KiB Mem:   1010540 total,   271652 used,   738888 free,    21760 buffers  
KiB Swap:  1048572 total,        0 used, 1048572 free.   158204 cached Mem  
  
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                    
 1850 root      20   0    7224    616    520 R 100.0  0.1   1:20.33 dd                      
 1851 root      20   0   24952   1756   1180 R   0.3  0.2   0:00.03 top                      
    1 root      20   0   33480   2776   1456 S   0.0  0.3   0:05.31 init                     
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd            

Como podemos ver, el uso de CPU ha llegado al 100%. Ahora, utilizaremos cpulimit para limitar el uso de CPU. Podemos llevar este proceso al primer plano usando el comando fg y cancelarlo con CTRL+C.

fg

Recuperar proceso al primer plano usando el comando fg

Ahora podemos probar cpulimit para ver si hace lo que debería. Probémoslo de la siguiente manera:

cpulimit -l 30 dd if=/dev/zero of=/dev/null &

root@server1:~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &

[1] 1852

root@server1:~# Proceso 1853 detectado

[1]+ Hecho cpulimit -l 30 dd if=/dev/zero of=/dev/null

root@server1:~#

Ahora verificaremos el uso de CPU con el comando top:

top

top - 11:30:54 up 55 min, 1 user, load average: 0.20, 0.58, 1.34

Tasks: 250 total, 2 running, 247 sleeping, 1 stopped, 0 zombie

%Cpu(s): 4.5 us, 4.1 sy, 0.0 ni, 91.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 1010540 total, 271944 used, 738596 free, 21816 buffers

KiB Swap: 1048572 total, 0 used, 1048572 free. 158212 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1853 root 20 0 7224 612 520 T 33.8 0.1 0:35.53 dd

1 root 20 0 33480 2776 1456 S 0.0 0.3 0:05.37 init

2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd

3 root 20 0 0 0 0 S 0.0 0.0 0:00.02 ksoftirqd/0

4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0

Ahora puedes ver que el uso de CPU ha disminuido del 100% al 33.8%, casi un 30%. Así que hemos comprobado con éxito la utilidad cpulimit, que puede limitar el uso del consumo de CPU en una distribución de Ubuntu de un solo núcleo.

  1. Aquí hay un ejemplo de cómo utilizar tu CPU con una aplicación en CPU de múltiples núcleos:

Para verificar tu núcleo de CPU, usa el comando:

nproc    

En mi caso, el conteo de núcleos de CPU era 4.
Ahora procederemos a verificar el uso de CPU sin cpulimit en los 4 núcleos para la aplicación de la siguiente manera:

for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done

Se ejecutará el comando utilizando todos los núcleos y producirá la salida como:

root@server1:~# for j in seq 1 4; do dd if=/dev/zero of=/dev/null & done

[1] 1263

[2] 1264

[3] 1265

[4] 1266

root@server1:~#

Ahora verifica el uso de CPU con el comando top:

top

top - 11:47:45 up 4 min, 1 user, load average: 3.63, 1.53, 0.57

Tasks: 290 total, 5 running, 285 sleeping, 0 stopped, 0 zombie

%Cpu0 : 48.3 us, 51.3 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st

%Cpu1 : 47.8 us, 52.2 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

%Cpu2 : 53.3 us, 46.4 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st

%Cpu3 : 52.0 us, 48.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 1010540 total, 209712 used, 800828 free, 20276 buffers

KiB Swap: 1048572 total, 0 used, 1048572 free. 93632 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1263 root 20 0 7224 612 520 R 100.0 0.1 2:21.40 dd

1264 root 20 0 7224 616 520 R 100.0 0.1 2:21.41 dd

1265 root 20 0 7224 612 520 R 99.0 0.1 2:21.03 dd

1266 root 20 0 7224 616 520 R 98.0 0.1 2:20.82 dd

1281 root 20 0 104416 3992 2920 S 1.0 0.4 0:00.03 sshd

1283 root 20 0 104416 3988 2920 S 1.0 0.4 0:00.03 sshd

1279 root 20 0 104556 4008 2924 S 0.7 0.4 0:00.08 sshd

El comando dd consume casi el 100% de CPU de todos los núcleos. A continuación, verificaremos el comando con la utilidad cpulimit. Para esto, mataremos los rastros anteriores del comando dd de la siguiente manera:

killall dd

root@server1:~# killall dd

[1] Terminado dd if=/dev/zero of=/dev/null

[3]- Terminado dd if=/dev/zero of=/dev/null

[2]- Terminado dd if=/dev/zero of=/dev/null

[4]+ Terminado dd if=/dev/zero of=/dev/null

root@server1:~#

Ahora usa cpulimit con el mismo comando de la siguiente manera:

for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done

root@server1:~# for j in seq 1 4; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done

[1] 1429

[2] 1430

[3] 1431

[4] 1432

root@server1:~# Proceso 1434 detectado

Proceso 1433 detectado

Proceso 1437 detectado

Proceso 1439 detectado

[1] Hecho cpulimit -l 20 dd if=/dev/zero of=/dev/null

[2] Hecho cpulimit -l 20 dd if=/dev/zero of=/dev/null

[3]- Hecho cpulimit -l 20 dd if=/dev/zero of=/dev/null

[4]+ Hecho cpulimit -l 20 dd if=/dev/zero of=/dev/null

root@server1:~#

Ahora verifica el uso de CPU con la utilidad cpulimit.

top

top - 11:59:10 up 16 min, 2 users, load average: 0.47, 0.71, 0.81

Tasks: 256 total, 2 running, 251 sleeping, 3 stopped, 0 zombie

%Cpu0 : 2.0 us, 2.0 sy, 0.0 ni, 96.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

%Cpu1 : 26.2 us, 22.8 sy, 0.0 ni, 50.7 id, 0.0 wa, 0.3 hi, 0.0 si, 0.0 st

%Cpu2 : 14.0 us, 12.3 sy, 0.0 ni, 73.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

%Cpu3 : 13.3 us, 11.6 sy, 0.0 ni, 75.1 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem: 1010540 total, 204064 used, 806476 free, 20408 buffers

KiB Swap: 1048572 total, 0 used, 1048572 free. 98340 cached Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

1433 root 20 0 7224 612 520 T 28.2 0.1 0:12.00 dd

1439 root 20 0 7224 616 520 R 26.6 0.1 0:12.13 dd

1434 root 20 0 7224 612 520 T 25.3 0.1 0:11.97 dd

1437 root 20 0 7224 612 516 T 22.9 0.1 0:11.93 dd

7 root 20 0 0 0 0 S 0.3 0.0 0:00.22 rcu_sched

8 root 20 0 0 0 0 S 0.3 0.0 0:00.21 rcuos/0

Como puedes ver arriba, el uso de CPU está limitado del 100% al 20% casi para CPUs de múltiples núcleos.

¡Felicidades! Hemos probado con éxito el cpulimit para limitar el uso de CPU en Ubuntu.

4 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.