Назад | Перейти на главную страницу

Управление ограничениями на использование ресурсов на компьютерах Linux

Всем привет. Мне интересно, есть ли хороший административный инструмент для ограничения потребления ресурсов пользователями в среде Linux.

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

Мне известно о /etc/security/limits.conf, но я не вижу способа ограничить группу пользователей / пользователей на основе использования процессора, что бесполезно, когда один процесс занимает несколько ядер процессора.

Если я что-то пропустил на странице руководства по limits.conf, не стесняйтесь указать мне в этом направлении, а также, если у вас есть другое предложение, я хотел бы его услышать!

Спасибо!

Я бы посмотрел на cgroups - это позволяет «разрезать» систему, предоставляя общие ресурсы процессу.

Вы можете указать ограничения в отношении памяти, процессора, дискового ввода-вывода и т. Д.

Например, чтобы ограничить до 10 МБ памяти в группе foo

 echo 10000000 > /sys/fs/cgroup/memory/groupname/foo/memory.limit_in_bytes

Здесь есть несколько вариантов.

Во-первых, вы можете установить хорошее значение для каждого пользователя или группы в /etc/security/limits.conf. Вы можете установить его, добавив такие строки:

@users      -       priority        10
username    -       priority        19

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

Вы также можете рассмотреть возможность использования виртуальных машин для этой задачи. Такая изоляция была бы очень полезна в ситуации, когда пользователи постоянно загружают ресурсы в общей системе. Использование хорошей системы оркестрации и развертывания, такой как OpenStack или CloudStack (или даже простой libvirt и KVM для меньших масштабов), может значительно упростить задачу, особенно с учетом количества «простых в использовании» инструментов развертывания для этих стеков, таких как Mirantis Fuel. .

Вы можете ознакомиться с ОС CloudLinux и ее функциями cageFs и lve. Это позволяет вам создать пользователя и определить запрос ram / cpu / hdd space / iops / mysql для каждого пользователя.