Як обмежити використання ресурсів для певного процесу?


11

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

Тож мені було цікаво, чи є спосіб обмежити використання IO, оперативної пам’яті та процесора для певного процесу? І його підпроцеси, звичайно.

Це в моїй системі Ubuntu 18.04 LTS.


2
@GreatUncleBulgaria Не дуже, якщо ви не хочете розлучатися з репутаційними очками. Проста відповідь на те, що ви запитуєте - просто поєднувати те, що запропонували інші - ionice, renice- і, можливо, ulimit -sкоманди, і все.
Сергій Колодяжний

@GreatUncleBulgaria Не знайомий з cgroups-ioтим поняття не маю :)
Сергій Колодяжний

Потенційно пов'язане запитання: askubuntu.com/q/538992/295286 У відповідях згадуються групи, але не багато іншого, так. . . можливо ?
Сергій Колодяжний

1
@SergiyKolodyazhnyy: Схоже, хтось очистив коментарі!

Відповіді:


8

Ви повинні використовувати комбінацію всіх cgexec, cpulimitі ionice:

  1. Обмежте оперативну пам’ять та 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. обмежте диск IO:

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

    Наведена вище команда використовує pgrepдля повторного використання частин поточного командного рядка для обмеження доступу до диска лише до диска, коли жодна інша програма не використовує її

  3. Обмежте процесор:

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

    Процесорний процесор зараз обмежений 25% від максимуму

Якщо програма не використовує багато процесора для початку, зменшіть значення cpulimit до половини або менше того, що вона використовує в даний час.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.