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

11

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

Поэтому мне было интересно, есть ли способ ограничить использование ввода-вывода, оперативной памяти и процессора для данного процесса? И его подпроцессы, конечно.

Это на моей системе Ubuntu 18.04 LTS.


источник
2
@GreatUncleBulgaria Не совсем, если только вы не хотите расставаться с очками репутации. Простой ответ на ваш вопрос состоит в том, чтобы просто объединить то, что другие предложили ionice, reniceи, возможно, ulimit -sкоманды, и все.
Сергей Колодяжный
@GreatUncleBulgaria Не знакомы, cgroups-ioтак что понятия не имею :)
Сергей Колодяжный
Потенциально связанный вопрос: askubuntu.com/q/538992/295286 Ответы там упоминают cgroups, но не так много, так. , , может быть ?
Сергей Колодяжный
1
@SergiyKolodyazhnyy: Похоже, кто-то убрал комментарии вверх!

Ответы:

8

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

  1. Ограничить RAM и 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

    Приведенные выше команды создают контрольную группу с именем szMyGroup(например, в вашем случае group-great-uncle), устанавливают ограничение на процессы, выполняемые szMyGroupдо 512 МБ физической памяти и до 1024 МБ подкачки, а затем:

    sudo cgexec -g memory:szMyGroup szMyProgram

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

  2. ограничить дисковый ввод-вывод:

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

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

  3. Ограничить процессор:

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

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

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

Fabby
источник