Ho un processo per un'applicazione che deve essere eseguita, ma finisce per utilizzare troppo l'utilizzo dell'IO per quello che fa. E manda davvero in crash il mio computer, rendendo impossibile fare qualsiasi altra cosa mentre è in esecuzione.
Quindi mi chiedevo se esiste un modo per limitare l'utilizzo di IO, RAM e CPU per un determinato processo? E ovviamente i suoi sottoprocessi.
Questo è sul mio sistema Ubuntu 18.04 LTS.
Migliore risposta
Dovresti usare una combinazione di tutti i cgexec
, cpulimit
e ionice
:
-
Limita RAM e 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
I comandi precedenti creano un gruppo di controllo denominato
szMyGroup
(Es. nel tuo casogroup-great-uncle
), imposta un limite ai processi eseguiti inszMyGroup
fino a 512 MB di memoria fisica e fino a 1024 MB di swap e poi:sudo cgexec -g memory:szMyGroup szMyProgram
che eseguirà il tuo programma sotto
szMyGroup
gruppo di controllo, garantendo così il rispetto dei limiti -
limitare l'IO del disco:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
Il comando precedente usa
pgrep
con il riutilizzo di parti della riga di comando corrente per limitare l'accesso al disco per utilizzare il disco solo quando nessun altro programma lo sta utilizzando -
Limita la CPU:
sudo cpulimit --limit=25 --pid=!#:4
La CPU del programma è ora limitata al 25% del massimo
Se il programma non utilizza molta CPU per cominciare, abbassa il valore di cpulimit alla metà o meno di quello che usa attualmente.