LImiting общее использование памяти для дочерних процессов
У меня есть долгосрочный скрипт, который запускает несколько дочерних процессов на компьютере с Linux с 8 ГБ памяти. После нескольких часов работы он занимает почти 90% памяти, и это приводит к тому, что другие службы, такие как SSH, перестают отвечать при запуске подкачки диска.
Каков наилучший способ программно ограничить общее использование памяти для моего сценария и всех дочерних процессов, не устанавливая конкретное ограничение памяти для каждого процесса в отдельности? Различные дочерние процессы могут использовать очень разные объемы памяти, поэтому было бы очень неэффективно устанавливать фиксированные пороговые значения.
В идеале я хотел бы просто указать "использовать до 75% памяти" и позволить системе делить это между детьми по мере необходимости, чтобы в любой момент времени я мог использовать SSH в машине. Сначала я попытался настроить задание cron для автоматического присвоения sshd наивысшего приоритета, но это не дало эффекта, и я обычно не могу войти в SSH, или приглашение SSH необычно медленно.
1 ответ
Запустите процессы как отдельный пользователь и настройте его через cgroups:
/etc/cgconfig.conf
:
group limitedram {
memory {
memory.limit_in_bytes = 6442450944;
}
}
а также /etc/cgrules.conf
:
serviceuser memory limitedram/
Это ограничивает использование памяти serviceuser
до 6 ГБ.