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

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

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

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

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

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

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

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

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

Спасибо

0

Решение

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

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

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

0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector