Как ограничить использование ресурсов для данного процесса?

У меня есть процесс для приложения, которое должно работать, но заканчивает тем, что использовало слишком много использования IO для того, что оно делает. И действительно разрушает мой компьютер, лишая возможности делать что-либо еще, пока он работает.

Таким образом, я задавался вопросом, существует ли способ ограничить использование IO, RAM и ЦП для данного процесса? И его подпроцессы, конечно.

Это находится в моей системе LTS Ubuntu 18.04.

10
задан 27 June 2018 в 16:13

1 ответ

Необходимо использовать комбинацию всех cgexec, cpulimit и ionice:

  1. Предельная 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 контрольная группа, таким образом удостоверяясь они придерживаются пределов

  2. ограничьте диск IO:

    sudo ionice --class 3 --pid $(pgrep -f szMyProgram)
    

    Вышеупомянутое использование команды pgrep с многократным использованием частей текущей командной строки для ограничения ее доступа к диску, чтобы только использовать диск, когда никакая другая программа не использует его

  3. Ограничьте ЦП:

    sudo cpulimit --limit=25 --pid=!#:4
    

    ЦП программы теперь ограничен 25% максимума

Если программа не использует много ЦП для начала, понижает значение cpulimit к половине или меньше того, что это в настоящее время использует.

8
ответ дан 23 November 2019 в 04:35

Другие вопросы по тегам:

Похожие вопросы: