Este tutorial describe cómo limitar el uso de la CPU en Ubuntu 18.04. Usaré la utilidad cpulimit para este propósito. Cpulimit es una herramienta que limita el uso de CPU de un proceso (expresado en porcentaje, no en tiempo de CPU). Es útil para controlar los trabajos por lotes cuando no desea que consuman demasiados ciclos de CPU. El objetivo de cpulimit es evitar que un proceso se ejecute durante más de una relación de tiempo especificada. No cambia el valor agradable u otras configuraciones de prioridad de programación, sino el uso real de la CPU. Además, es capaz de adaptarse a la carga general del sistema, de forma dinámica y rápida.
El control de la cantidad de CPU utilizada se realiza enviando señales SIGSTOP y SIGCONT POSIX a los procesos. Todos los procesos e hilos secundarios del proceso especificado compartirán el mismo porcentaje de CPU.
1 nota preliminar
Este tutorial se basa en el servidor Ubuntu 18.04 LTS (Bionic Beaver), por lo que debe configurar una instalación básica del servidor Ubuntu 18.04 antes de continuar con este tutorial. El sistema debe tener una dirección IP estática. Uso 192.168.1.100 como mi dirección IP en este tutorial y server1.example.com como nombre de host.
2 Instalación de límite de CPU
Primero necesitamos instalar cpulimit de la siguiente manera:
apt-get update
apt-get install cpulimit
3 Limitación del uso de la CPU
Ahora comprobaremos la utilidad para limitar el uso de la CPU. Para esto, primero verificaremos el uso de la CPU sin cpulimit y luego implementaremos cpulimit para evaluar el mismo. Dejémoslo claro con el ejemplo.
- Este es un ejemplo de cómo utilizar su CPU con una aplicación en CPU de un solo núcleo:
dd if=/dev/zero of=/dev/null &
Luego verificaremos el uso de la 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 que el uso de la CPU ha llegado al 100%, ahora usaremos cpulimit para limitar el uso de la CPU. Podemos traer este proceso a primer plano usando fg comando y cancelarlo con CTRL+C
fg
Ahora podemos probar cpulimit para ver si realmente hace lo que se supone que debe hacer. Vamos a probarlo de la siguiente manera:
cpulimit -l 30 dd if=/dev/zero of=/dev/null &[correo electrónico protegido]:~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[1] 1852
[correo electrónico protegido]:~# Proceso 1853 detectado
[1]+ Listo cpulimit -l 30 dd if=/dev/zero of=/dev/null
[email protected]:~#
Ahora comprobaremos el uso de la CPU con el comando superior:
toparriba - 11:30:54 hasta 55 min, 1 usuario, promedio de carga:0,20, 0,58, 1,34
Tareas:250 en total, 2 en ejecución, 247 en reposo, 1 detenida, 0 zombis
%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 en total, 271944 usados, 738596 libres, 21816 buffers
Intercambio de KiB:1048572 en total, 0 usados, 1048572 gratis. 158212 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1853 raíz 20 0 7224 620 3; rojo 3; /fuerte> 0.1 0:35.53 dd
1 raíz 20 0 33480 2776 1456 S 0.0 0.3 0:05.37 init
2 raíz 20 0 0 0 0 0 s 0.0 0.0 0:00.01 kthreadd
3 raíz 20 0 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 puede ver que el uso de la CPU ha disminuido del 100 % al 33,8 %, casi un 30 %. Así que hemos verificado 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.
- Este es un ejemplo de cómo utilizar su CPU con una aplicación en una CPU de múltiples núcleos:
Para verificar el núcleo de su CPU, use el comando:
nproc
En mi caso, el número de núcleos de la CPU era 4.
Ahora procederemos a verificar el uso de la CPU sin cpulimit en los 4 núcleos de la aplicación de la siguiente manera:
for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done
Ejecutará el comando utilizando todos los núcleos y producirá la salida como:
[1] 1263
[2] 1264
[3] 1265
[4] 1266
[correo electrónico protegido]:~#
Ahora verifique el uso de la CPU con el comando superior:
topsuperior - 11:47:45 activo 4 min, 1 usuario, promedio de carga:3,63, 1,53, 0,57
Tareas:290 en total, 5 en ejecución, 285 en reposo, 0 detenido, 0 zombi
%Cpu0 :48,3 us, 51,3 sy, 0,0 ni, 0,0 id, 0,0 wa, 0,3 hola, 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 usado, 800828 gratis, 20276 buffers
KiB Swap: 1048572 total, 0 usado, 1048572 gratis 93632 cached Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1263 root 20 0 7224 612 ; <0" strong> /fuerte> 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 raíz 20 0 7224 616 520 R 98.0 0.1 2:20.82 dd
1281 raíz 20 0 104416 3992 2920 s 1.0 0.4 0:00.03 sshd
1283 raíz 20 0 104416 3988 2920 S 1.0 0.4 0:00.03 SSHD
1279 Raíz 20 0 104556 4008 2924 S 0.7 0.4 0:00.08 sshd
El comando dd consume casi el 100 % de la CPU de todos los núcleos. A continuación, comprobaremos el comando con la utilidad cpulimit. Para esto, elimine los rastros anteriores del comando dd de la siguiente manera:
killall dd[email protected]:~# 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
[correo electrónico protegido]:~#
Ahora use 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[email protected]:~# 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
[email protected]:~# Proceso 1434 detectado
Proceso 1433 detectado
Proceso 1437 detectado
Proceso 1439 detectado
[1] Listo cpulimit -l 20 dd if=/dev/zero of=/dev/null
[2] Listo cpulimit -l 20 dd if=/dev/zero of=/dev/null
[3]- Listo cpulimit -l 20 dd if=/dev/zero of=/dev/null
[4]+ Listo cpulimit -l 20 dd if=/dev/zero of=/dev/null
[email protected ]:~#
Ahora verifique el uso de la CPU con la utilidad cpulimit.
toptop - 11:59:10 up 16 min, 2 usuarios, promedio de carga:0.47, 0.71, 0.81
Tareas:256 en total, 2 en ejecución, 251 en reposo, 3 detenidos, 0 zombi
%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 hola, 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 usado, 806476 gratis, 20408 buffers
KiB Swap: 1048572 total, 0 usado, 1048572 gratis 98340 caché Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1433 raíz 20 0 7224 612
1439 root 20 0 7224 616 520 R 26.6 0.1 0:12.13 dd
1434 raíz 20 0 7224 612 520 T 25.3 0.1 0:11.97 dd
1437 raíz 20 0 7224 612 516 T 22.9 0.1 0:11.93 dd
7 raíz 20 0 0 0 0 S 0.3 0.0 0:00.22 rcu_sched
8 raíz 20 0 0 0 0 s 0.3 0.0 0:00.21 rcuos /0
Como puede ver arriba, el uso de la CPU está limitado del 100 % al 20 % casi para varias CPU de núcleo.
¡Felicitaciones! Hemos probado con éxito cpulimit para limitar el uso de la CPU en Ubuntu 18.04 :)
4 Enlaces
- Ubuntu:http://www.ubuntu.com/
- cpulimit:https://github.com/opsengine/cpulimit