Использование Cgroup для ограничения ресурсов

Моя цель: предоставить пользователю способ ограничить ресурсы, такие как процессор, память для данного процесса (C++).

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

После некоторых исследований у меня возникла проблема:

Когда мы используем memory.limit_in_bytes для ограничения использования памяти для данного процесса, есть ли способ обработать исключение нехватки памяти в процессе? Я вижу, что контрольные группы предоставляют параметр с именем memory.oom_control, который при включении убивает процесс, который запрашивает больше памяти, чем разрешено. При отключении он просто приостанавливает процесс.

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

Предоставляет ли cgroups такое поведение?

Также доступна ли cgroup во всех разновидностях Linux? В основном меня интересуют машины RHEL 5+, CENTOS 6+ и ubuntu 12+.

Любая помощь приветствуется.

Спасибо

1 ответ

Решение

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

Предоставляет ли cgroups такое поведение?

Все процессы в последних выпусках уже выполняются внутри cgroup, по умолчанию. Если вы создаете новую cgroup, а затем переносите процесс в новую cgroup, все работает как и раньше, но с использованием ограничений из новой cgroup. Если ваш процесс выделяет больше памяти, чем разрешено, он получает ENOSPC или сбой malloc, как это происходит в настоящее время.

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