Рейтинг:9

Как я могу ограничить использование ЦП и ОЗУ для процесса?

флаг in

Я на Ubuntu VPS с SFTP и консолью. Мне нужен определенный процесс, чтобы использовать только 60% моего ЦП и 2048 МБ ОЗУ.

Мне также нужно, чтобы другой процесс использовал только 30% ЦП и 1024 МБ ОЗУ.

Как я могу ограничить использование ЦП и ОЗУ процессом?

muru avatar
флаг us
Отвечает ли это на ваш вопрос? [Как ограничить использование ресурсов для данного процесса?](https://askubuntu.com/questions/1045076/how-to-limit-resource-usage-for-a-given-process)
Рейтинг:13
флаг in

Имейте в виду: Здесь будут драконы.

Когда вы начинаете идти по пути конкретного контроля ресурсов приложений/процессов/потоков до такой степени, вы начинаете буквально открывать ящик Пандоры с проблемами, когда приходит время отладить проблему, которую не учло ваше ограничение скорости.

Тем не менее, если вы считаете, что знаете, что делаете, у вас есть три варианта: красивый, cpulimitи контрольные группы (Cgroups).

Вот TL;DR для этих трех методов:

Хороший ¢ хороший {процесс}

Это очень простой способ приоритизации задачи, и он весьма эффективен для одноразового использования, например, для снижения приоритета длительной, ресурсоемкой задачи, которая должна использовать больше ресурсов ЦП, когда машина не используется. другими задачами (или людьми).

Лимит ЦП ¢ cpulimit -l 60 {процесс}

Если производительность вашего сервера снижается (например, останавливается), когда загрузка ЦП превышает определенную величину, тогда cpulimit может помочь снизить давление в системе.Он делает это, приостанавливая процесс через разные промежутки времени, чтобы удерживать его ниже определенного потолка, отправляя SIGSTOP и SIGCONT сигналы процессу. cpulimit не меняет красивый значение процесса, вместо этого он отслеживает и контролирует реальное использование ЦП.

Вы обнаружите, что cpulimit полезно, когда вы хотите убедиться, что процесс не использует больше определенной части ЦП, на что ссылается ваш вопрос, но недостатком является то, что процесс не может использовать все доступное время ЦП, когда система простаивает ( который красивый позволяет).

CGgroups

sudo cgcreate -g процессор:/сдержанный
sudo cgset -r cpu.shares=768 ограничено
sudo cgexec -g cpu: ограничен {процесс}

Cgroups — контрольные группы — это функция, встроенная в ядро ​​Linux, которая позволяет вам контролировать распределение ресурсов. С помощью Cgroups вы можете указать, сколько ЦП, памяти, пропускной способности, или комбинации этих ресурсов может использоваться процессами, назначенными группе.

Ключевое преимущество Cgroups перед красивый или же cpulimit заключается в том, что ограничения применяются к набору процессов; не один. красивый и cpulimit также ограничены ограничением использования ЦП процессом, тогда как Cgroups могут ограничивать другие ресурсы процесса.

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

флаг mx
и об ограничении использования оперативной памяти; Можете ли вы привести пример, чтобы сделать это через CGroups?
Рейтинг:10
флаг cn

На заметку: если вы не хотите ставить процесс жестким ограничением, а только приоритетом, поищите красивый команда. Этот ответ предполагает, что вам нужен жесткий предел.

Ограничение использования ЦП

Этот замечательный ответ на другой вопрос объясняет это довольно хорошо

Установить cpulimit

sudo apt-get установить cpulimit

Он предоставляет различные методы ограничения использования ЦП процессом. фу сказать, 20%

  • По имени процесса: sudo cpulimit -e foo -l 20.

  • По абсолютному имени пути: sudo cpulimit -P /usr/bin/foo -l 20

  • По его PID:

  1. Найдите PID процесса: пидоф фу. (скажем, он выводит 1881)
  2. sudo cpulimit -p 1881 -l 20

Ограничение использования памяти

Дополнительные параметры см. эта почта о том, как ограничить использование оперативной памяти.

Например, чтобы ограничить процесс 12345 до 2048 МБ использования ОЗУ, вы можете использовать прлимит команда

$ prlimit --pid 12345 --as=2048000000
флаг mx
Обратите внимание, что «ограничение адресного пространства» **не то же самое**, что и «ограничение использования оперативной памяти». Назвать это «ограничить виртуальную память (ОЗУ+подкачка)» немного лучше, но все же неправильно.Можно легко иметь программу, которая требует 3 ГБ или адресного пространства, используя, например, только 100 МБ ОЗУ и 0 МБ подкачки (см. `mmap (2)` и друзья, разреженные массивы и т. д.).
cocomac avatar
флаг cn
@MatijaNalis Если вы знаете лучший способ, напишите ответ. Или отредактируйте один из существующих ответов.
Peter Cordes avatar
флаг fr
@MatijaNalis: традиционный ulimit `-m ` (в КиБ) работает? Предполагается, что он ограничивает размер резидентного набора, согласно `ulimit --help`. (Есть отдельный ulimit `-v виртуальная память` (в KiB)). Для процессорного времени также есть традиционный `ulimit -t `, который, как я предполагаю, просто заставляет ядро ​​​​убивать процесс, превышающий его.
флаг mx
@PeterCordes, к сожалению, я так не думаю (хотя ResidentSetSize - это именно то, что @newalvaro9 хочет ограничить) - во всяком случае, не в каких-либо неархаичных ядрах. `strace bash` показывает, что `ulimit -m` вызывает `prlimit64(0, RLIMIT_RSS, ...`, а справочная страница `prlimit64(2)` говорит (среди прочего), что ограничение `RLIMIT_RSS [....] действует только в Linux 2.4.x, x
Peter Cordes avatar
флаг fr
@MatijaNalis: Это имеет смысл. При включенном по умолчанию избыточном выделении памяти было бы трудно сделать его полезным. Выделение физических страниц происходит слишком поздно, чтобы mmap / malloc возвращал NULL, поэтому единственными вариантами были бы замена других страниц, чтобы освободить место (создание перегрузки подкачки, когда один процесс был вне RSS) или его уничтожение, ни один из которых особенно желателен. . И, по-видимому, выполнение учета будет отстойным для производительности многоядерной системы для многопоточных процессов. Но также имеет смысл, что опция оболочки `ulimit -m` не может исчезнуть, равно как и поля API/ABI.
Peter Cordes avatar
флаг fr
Для сборки `bash` для Linux может иметь смысл печатать `(нет эффекта в Linux после 2.4.30)` как часть вывода справки, чтобы другие люди не тратили на это свое время, если в основном нет шанс, что будущая версия Linux снова заставит его что-то делать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.