Ce tutoriel décrit comment limiter l'utilisation du processeur dans Ubuntu 18.04. J'utiliserai l'utilitaire cpulimit à cette fin. Cpulimit est un outil qui limite l'utilisation CPU d'un processus (exprimée en pourcentage, pas en temps CPU). Il est utile de contrôler les travaux par lots lorsque vous ne voulez pas qu'ils consomment trop de cycles CPU. L'objectif de cpulimit est d'empêcher un processus de s'exécuter pendant plus d'un rapport de temps spécifié. Cela ne change pas la valeur nice ou d'autres paramètres de priorité de planification, mais l'utilisation réelle du processeur. De plus, il est capable de s'adapter à la charge globale du système, de manière dynamique et rapide.
Le contrôle de la quantité de CPU utilisée se fait en envoyant des signaux SIGSTOP et SIGCONT POSIX aux processus. Tous les processus et threads enfants du processus spécifié partageront le même pourcentage de CPU.
1 Remarque préliminaire
Ce didacticiel est basé sur le serveur Ubuntu 18.04 LTS (Bionic Beaver). Vous devez donc configurer une installation de base du serveur Ubuntu 18.04 avant de poursuivre ce didacticiel. Le système doit avoir une adresse IP statique. J'utilise 192.168.1.100 comme adresse IP dans ce tutoriel et server1.example.com comme nom d'hôte.
2 Installation de CPULimit
Tout d'abord, nous devons installer cpulimit comme suit :
apt-get update
apt-get install cpulimit
3 Limiter l'utilisation du processeur
Nous allons maintenant vérifier l'utilitaire pour limiter l'utilisation du processeur. Pour cela, nous allons d'abord vérifier l'utilisation du processeur sans cpulimit, puis implémenter le cpulimit pour l'évaluer. Soyons clairs avec l'exemple.
- Voici un exemple d'utilisation de votre CPU avec une application en CPU monocœur :
dd if=/dev/zero of=/dev/null &
Ensuite, nous vérifierons l'utilisation du processeur avec la commande :
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
Comme nous pouvons voir que l'utilisation du processeur est passée à 100 %, nous allons maintenant utiliser cpulimit pour limiter l'utilisation du processeur. Nous pouvons mettre ce processus au premier plan en utilisant fg commande et annulez-la avec CTRL+C
fg
Nous pouvons maintenant tester cpulimit pour voir s'il fait réellement ce qu'il est censé faire. Laissez-le tester comme suit :
cpulimit -l 30 dd if=/dev/zero of=/dev/null &[email protected] :~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[1] 1852
[email protected] :~# processus 1853 détecté
[1]+ Terminé cpulimit -l 30 dd if=/dev/zero of=/dev/null
[email protected] :~#
Nous allons maintenant vérifier l'utilisation du processeur avec la commande top :
toptop - 11:30:54 jusqu'à 55 min, 1 utilisateur, charge moyenne :0,20, 0,58, 1,34
Tâches :250 au total, 2 en cours d'exécution, 247 en veille, 1 arrêtée, 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 au total, 271944 utilisés, 738596 libres, 21816 tampons
Kio Swap :1048572 au total, 0 utilisé, 1048572 libre. 158212 Mem en cache
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1853 root 20 0 7224 red style: 3 520 /fort> 0,1 0:35,53 dd
1 racine 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 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
Vous pouvez maintenant constater que l'utilisation du processeur est passée de 100 % à 33,8 %, soit près de 30 %. Nous avons donc vérifié avec succès l'utilitaire cpulimit qui est capable de limiter l'utilisation de la consommation du processeur dans une distribution Ubuntu à un seul cœur.
- Voici un exemple d'utilisation de votre processeur avec une application dans un processeur multicœur :
Pour vérifier le cœur de votre CPU, utilisez la commande :
nproc
Dans mon cas, le nombre de cœurs du processeur était de 4.
Nous allons maintenant vérifier l'utilisation du processeur sans cpulimit dans les 4 cœurs de l'application comme suit :
for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done
Il exécutera la commande en utilisant tous les cœurs et produira la sortie comme :
[1] 1263
[2] 1264
[3] 1265
[4] 1266
[e-mail protégé] :~#
Vérifiez maintenant l'utilisation du processeur avec la commande top :
toptop - 11:47:45 jusqu'à 4 min, 1 utilisateur, charge moyenne :3,63, 1,53, 0,57
Tâches :290 au total, 5 en cours d'exécution, 285 en veille, 0 arrêté, 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 au total, 209712 utilisés, 800828 libres, 20276 tampons
KiB Swap : 1048572 au total, 0 utilisé, 1048572 libres 93632 Mem en cache
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1263 racine 20 0 7224 612 520. /fort> 0.1 2:21.40 jj
1264 racine 20 0 7224 616 520 L 100.0 0.1 2:21.41 dd
1265 racine 20 0 7224 612 520 R 99.0 0.1 2:21.03 dd
1266 racine 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 Racine 20 0 104556 4008 2924 S 0,7 0,4 0:00.08 sshd
La commande dd consomme presque 100 % du processeur de tous les cœurs. Ensuite, nous allons vérifier la commande avec l'utilitaire cpulimit. Pour cela, supprimez les traces précédentes de la commande dd comme suit :
killall dd[email protected] :~# killall dd
[1] Terminé dd if=/dev/zero of=/dev/null
[3]- Terminé dd if=/dev/zero of=/dev /null
[2]- Terminé dd if=/dev/zero of=/dev/null
[4]+ Terminé dd if=/dev/zero of=/dev/null
[e-mail protégé] :~#
Utilisez maintenant cpulimit avec la même commande comme suit :
for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done[email protected] :~# pour j dans `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] :~# Processus 1434 détecté
Processus 1433 détecté
Processus 1437 détecté
Processus 1439 détecté
[1] Terminé cpulimit -l 20 dd if=/dev/zero of=/dev/null
[2] Terminé cpulimit -l 20 dd if=/dev/zero of=/dev/null
[3]- Terminé cpulimit -l 20 dd if=/dev/zero of=/dev/null
[4]+ Terminé cpulimit -l 20 dd if=/dev/zero of=/dev/null
[email protected ] :~#
Vérifiez maintenant l'utilisation du processeur avec l'utilitaire cpulimit.
toptop - 11:59:10 up 16 min, 2 utilisateurs, moyenne de charge :0,47, 0,71, 0,81
Tâches : 256 au total, 2 en cours d'exécution, 251 en veille, 3 arrêtées, 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 au total, 204064 utilisés, 806476 libres, 20408 tampons
KiB Swap : 1048572 au total, 0 utilisé, 1048572 libres 98340 Mem en cache
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1433 root 20 0 7224 612 520. 0.1 0:12.00 jj
1439 racine 20 0 7224 616 520 R 26.6 0.1 0:12.13 dd
1434 racine 20 0 7224 612 520 T 25.3 0.1 0:11.97 dd
1437 racine 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
Comme vous pouvez le voir ci-dessus, l'utilisation du processeur est limitée de 100 % à 20 % presque pour les processeurs à plusieurs cœurs.
Félicitations ! Nous avons testé avec succès le cpulimit pour limiter l'utilisation du processeur dans Ubuntu 18.04 :)
4 liens
- Ubuntu :http://www.ubuntu.com/
- cpulimit :https://github.com/opsengine/cpulimit