Tento návod popisuje, jak omezit využití procesoru v Ubuntu 18.04. K tomuto účelu použiji nástroj cpulimit. Cpulimit je nástroj, který omezuje využití procesoru procesem (vyjádřeno v procentech, nikoli v čase procesoru). Je užitečné řídit dávkové úlohy, když nechcete, aby spotřebovaly příliš mnoho cyklů CPU. Cílem cpulimit je zabránit tomu, aby proces běžel déle, než je zadaný časový poměr. Nemění to hodnotu nice ani jiné nastavení priority plánování, ale skutečné využití procesoru. Také se dokáže dynamicky a rychle přizpůsobit celkové zátěži systému.
Řízení množství použitého CPU se provádí odesíláním signálů SIGSTOP a SIGCONT POSIX do procesů. Všechny podřízené procesy a vlákna zadaného procesu budou sdílet stejné procento CPU.
1 předběžná poznámka
Tento výukový program je založen na serveru Ubuntu 18.04 LTS (Bionic Beaver), takže před pokračováním v tomto výukovém programu byste měli nastavit základní instalaci serveru Ubuntu 18.04. Systém by měl mít statickou IP adresu. V tomto návodu používám jako svou IP adresu 192.168.1.100 a jako název hostitele server1.example.com.
2 Instalace CPULimit
Nejprve musíme nainstalovat cpulimit následovně:
apt-get update
apt-get install cpulimit
3 Omezení využití procesoru
Nyní zkontrolujeme utilitu pro omezení využití procesoru. Za tímto účelem nejprve zkontrolujeme využití CPU bez cpulimit a poté implementujeme cpulimit, abychom to vyhodnotili. Ujasněme si to na příkladu.
- Zde je příklad využití CPU s aplikací v jednojádrovém CPU:
dd if=/dev/zero of=/dev/null &
Poté zkontrolujeme využití procesoru příkazem:
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
Jak vidíme, že využití procesoru se zvýšilo na 100 %, nyní k omezení využití procesoru použijeme cpulimit. Tento proces můžeme dostat do popředí pomocí fg a zrušte jej pomocí CTRL+C
fg

Nyní můžeme otestovat cpulimit, abychom zjistili, zda skutečně dělá to, co má. Nechte to otestovat následovně:
cpulimit -l 30 dd if=/dev/zero of=/dev/null &[e-mail chráněný]:~# cpulimit -l 30 dd if=/dev/zero of=/dev/null &
[1] 1852
[e-mail chráněn]:~# Zjištěn proces 1853
[1]+ Hotovo cpulimit -l 30 dd if=/dev/zero of=/dev/null
[e-mail chráněn]:~#
Nyní zkontrolujeme využití CPU příkazem top:
topnahoře - 11:30:54 nahoru 55 min, 1 uživatel, průměrné zatížení:0,20, 0,58, 1,34
Úkoly:celkem 250, 2 běžící, 247 spící, 1 zastaveno, 0 zombie
%Cpu(y) ): 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 Paměť: 1010540 celkem, S 271943 p B zdarma, 271943 B wa použito 6 Celkem 1048572, 0 použito, 1048572 zdarma. 158212 CACHED MEM
Uživatel pid pr ni virty res s %cpu %mem time+ příkaz
1853 root 20 0 7224 612 520 t
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 0 0 S 0,0 0,0 0:00,02 ksoftirqd/0
4 odmocnina 20 0 .0 0. 0 0 0 k. 0 0 k.
Nyní můžete vidět, že využití procesoru kleslo ze 100 % na 33,8 % téměř o 30 %. Úspěšně jsme tedy zkontrolovali obslužný program cpulimit, který je schopen omezit využití spotřeby CPU v distribuci Ubuntu s jedním jádrem.
- Zde je příklad využití CPU s aplikací s vícejádrovým CPU:
Pro kontrolu jádra CPU použijte příkaz:
nproc
V mém případě je počet jader CPU 4.
Nyní přistoupíme ke kontrole využití CPU bez cpulimit ve všech 4 jádrech aplikace takto:
for j in `seq 1 4`; do dd if=/dev/zero of=/dev/null & done
Spustí příkaz s využitím všech jader a výstup vydá jako:
[1] 1263
[2] 1264
[3] 1265
[4] 1266
[e-mail chráněný]:~#
Nyní zkontrolujte využití procesoru příkazem top:
topnahoře - 11:47:45 nahoru 4 minuty, 1 uživatel, průměrná zátěž:3,63, 1,53, 0,57
Úkoly:290 celkem, 5 běží, 285 spící, 0 zastaveno, 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, 0,0 .0 . 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 :48,0 s, 0 us, 0. 0 , 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: 1010540 celkem, 209712 využito, 800828 zdarma, 0 20276 využito 4, 8 volných 2 1 swap celkem
KiB 1 swap celkem 93632 uložená paměť
PID USER PR NI VIRT RES SHR S %CPU %MEM ČAS + PŘÍKAZ
1263 kořenová
1272 20 2
1272 1 0 /strong> 0,1 2:21,40 dd
1264 kořen 20 0 7224 616 520 R 100 R 10 0,1 2:21,41 dd
1265 kořen 20 0 7224 612 520 R 9 0,1 2:21,03 dd
1266 kořen 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
Příkaz dd spotřebovává téměř 100 % CPU všech jader. Dále zkontrolujeme příkaz pomocí utility cpulimit. Za tímto účelem ukončete předchozí trasování příkazu dd následovně:
killall dd[e-mail protected]:~# killall dd
[1] Ukončeno dd if=/dev/zero of=/dev/null
[3]- Ukončeno dd if=/dev/zero of=/de /null
[2]- Ukončeno dd if=/dev/zero of=/dev/null
[4]+ Ukončeno dd if=/dev/zero of=/dev/null
[e-mail chráněný]:~#
Nyní použijte cpulimit se stejným příkazem takto:
for j in `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null & done[e-mail chráněný]:~# pro j v `seq 1 4`; do cpulimit -l 20 dd if=/dev/zero of=/dev/null &hotovo
[1] 1429
[2] 1430
[3] 1431
[4 ] 1432
[e-mail chráněn]:~# Zjištěn proces 1434
Zjištěn proces 1433
Zjištěn proces 1437
Zjištěn proces 1439
[1] Hotovo pulimit -l 20 dd if=/dev/zero of=/dev/null
[2] Hotovo cpulimit -l 20 dd if=/dev/zero of=/dev/null
[3]- Hotovo cpulimit -l 20 dd if=/dev/zero of=/dev/null
[4]+ Hotovo cpulimit -l 20 dd if=/dev/zero of=/dev/null
[e-mail chráněno ]:~#
Nyní zkontrolujte využití CPU pomocí nástroje cpulimit.
topnahoře - 11:59:10 nahoru 16 min, 2 uživatelé, průměrná zátěž:0,47, 0,71, 0,81
Úkoly:celkem 256, 2 běží, 251 spící, 3 zastaveny, 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, 30,0 ni, 30,0 .0. 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 :111,3 s, 0,0 r. , 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem: 1010540 celkem, 204064 využito, 806476 zdarma, 0 20408 využito, 7 volných 2, 4 1 Swap celkem
KiB 1 swap celkem 98340 uložená paměť
PID UŽIVATELE PR NI VIRT RES SHR S %CPU %MEM ČAS + PŘÍKAZ
2 2 2. 2 2. 2 2 2 2 0,1 0:12,00 dd
1439 kořen 20 0 7224 616 520 R 2 0,1 0:12,13 dd
1434 kořen 20 0 7224 612 520 T 25,3 0,1 0:11,97 dd
1437 kořen 20 0 7224 612 516 T 2 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
Jak vidíte výše, využití procesoru je omezeno od 100 % do 20 % téměř u vícejádrových procesorů.
Blahopřejeme! Úspěšně jsme testovali cpulimit pro omezení využití CPU v Ubuntu 18.04 :)
4 odkazy
- Ubuntu:http://www.ubuntu.com/
- cpulimit :https://github.com/opsengine/cpulimit