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 ГБ.

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