Моя цель: предоставить пользователю способ ограничить ресурсы, такие как процессор, память для данного процесса (C ++).
Поэтому кто-то предложил мне использовать Cgroups, что выглядит как идеальная утилита.
После некоторых исследований у меня возникла проблема:
Когда мы используем memory.limit_in_bytes для ограничения использования памяти для данного процесса, есть ли способ обработать исключение нехватки памяти в процессе? Я вижу, что контрольные группы предоставляют параметр с именем memory.oom_control, который при включении убивает процесс, который запрашивает больше памяти, чем разрешено. При отключении он просто приостанавливает процесс.
Мне нужен способ сообщить процессу, что он запрашивает больше памяти, чем ожидалось, и должен исключить из памяти исключение. Это так, что процесс грациозно завершается.
Предоставляет ли cgroups такое поведение?
Также доступна ли cgroup во всех разновидностях Linux? Я в основном заинтересован в машинах RHEL 5+, CENTOS 6+ и Ubuntu 12+.
Любая помощь приветствуется.
Спасибо
Мне нужен способ сообщить процессу, что он запрашивает больше памяти, чем ожидалось, и должен исключить из памяти исключение. Это так, что процесс грациозно завершается.
Предоставляет ли cgroups такое поведение?
Все процессы в последних выпусках уже выполняются внутри cgroup, по умолчанию. Если вы создаете новую cgroup, а затем переносите процесс в новую cgroup, все работает как и прежде, но с использованием ограничений из новой cgroup. Если ваш процесс выделяет больше памяти, чем разрешено, он получает ENOSPC или сбой malloc, как это происходит в настоящее время.