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_bytesI comandi precedenti creano un gruppo di controllo denominato
szMyGroup(Es. nel tuo casogroup-great-uncle), imposta un limite ai processi eseguiti inszMyGroupfino a 512 MB di memoria fisica e fino a 1024 MB di swap e poi:sudo cgexec -g memory:szMyGroup szMyProgramche eseguirà il tuo programma sotto
szMyGroupgruppo 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
pgrepcon 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=!#:4La 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.