У меня есть процесс для приложения, которое должно работать, но заканчивает тем, что использовало слишком много использования IO для того, что оно делает. И действительно разрушает мой компьютер, лишая возможности делать что-либо еще, пока он работает.
Таким образом, я задавался вопросом, существует ли способ ограничить использование IO, RAM и ЦП для данного процесса? И его подпроцессы, конечно.
Это находится в моей системе LTS Ubuntu 18.04.
Необходимо использовать комбинацию всех cgexec
, cpulimit
и ionice
:
Предельная RAM и ПОДКАЧКА:
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
Вышеупомянутые команды создают названную контрольную группу szMyGroup
(Например, в Вашем случае group-great-uncle
), установите ограничение на процессы, выполненные под szMyGroup
до 512 МБ физической памяти и до 1 024 МБ подкачки и затем:
sudo cgexec -g memory:szMyGroup szMyProgram
который запустит Вашу программу под szMyGroup
контрольная группа, таким образом удостоверяясь они придерживаются пределов
ограничьте диск IO:
sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
Вышеупомянутое использование команды pgrep
с многократным использованием частей текущей командной строки для ограничения ее доступа к диску, чтобы только использовать диск, когда никакая другая программа не использует его
Ограничьте ЦП:
sudo cpulimit --limit=25 --pid=!#:4
ЦП программы теперь ограничен 25% максимума
Если программа не использует много ЦП для начала, понижает значение cpulimit к половине или меньше того, что это в настоящее время использует.