Mám proces pro aplikaci, která musí běžet, ale nakonec využívá příliš mnoho IO na to, co dělá. A skutečně mi zhroutí počítač, takže za běhu není možné dělat nic jiného.
Tak mě zajímalo, jestli existuje způsob, jak omezit využití IO, RAM a CPU pro daný proces? A samozřejmě jeho dílčí procesy.
Toto je na mém systému Ubuntu 18.04 LTS.
Nejlepší odpověď
Měli byste použít kombinaci všech cgexec
, cpulimit
a ionice
:
-
Omezit RAM a SWAP:
sudo cgcreate -g memory:/szMyGroup echo $(( 512 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.limit_in_bytes echo $(( 1024 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.memsw.limit_in_bytes
Výše uvedené příkazy vytvoří řídicí skupinu s názvem
szMyGroup
(Např. ve vašem případěgroup-great-uncle
), nastavte omezení procesů spuštěných podszMyGroup
až 512 MB fyzické paměti a až 1024 MB swap a poté:sudo cgexec -g memory:szMyGroup szMyProgram
který spustí váš program pod
szMyGroup
kontrolní skupiny, čímž je zajištěno, že dodržují limity -
omezit IO disku:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
Výše uvedený příkaz používá
pgrep
s opětovným použitím částí aktuálního příkazového řádku k omezení jeho přístupu k disku na použití disku pouze v případě, že žádný jiný program jej nepoužívá -
Omezte CPU:
sudo cpulimit --limit=25 --pid=!#:4
CPU programu je nyní omezeno na 25 % maxima
Pokud program ze začátku nevyužívá mnoho CPU, snižte hodnotu cpulimit na polovinu nebo méně toho, co aktuálně používá.