Ограничение общего использования памяти для дочерних процессов

Ограничение общего использования памяти для дочерних процессов

У меня есть долго работающий скрипт, который запускает несколько дочерних процессов на машине 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 ГБ.

Связанный контент