Назад | Перейти на главную страницу

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

У меня есть долго работающий скрипт, который запускает несколько дочерних процессов на машине Linux с 8 ГБ памяти. После нескольких часов работы он занимает почти 90% памяти, и это приводит к тому, что другие службы, такие как SSH, не отвечают, когда он начинает замену диска.

Как лучше всего программно ограничить общее использование памяти для моего скрипта и всех дочерних процессов, не устанавливая определенный предел памяти для каждого процесса индивидуально? Разные дочерние процессы могут использовать очень разный объем памяти, поэтому устанавливать фиксированные пороги было бы очень неэффективно.

В идеале я хотел бы просто указать «использовать только до 75% памяти» и позволить системе разделить это между дочерними элементами по мере необходимости, чтобы я мог по-прежнему подключаться к машине по SSH в любой момент времени. Сначала я попытался настроить задание cron для автоматического повышения приоритета sshd, но это не помогло, и я обычно не могу подключиться по SSH, или приглашение SSH работает необычно медленно.

Запустите процессы от имени выделенного пользователя и настройте его через cgroups:

/etc/cgconfig.conf:

group limitedram {
    memory {
        memory.limit_in_bytes = 6442450944;
    }
}

и /etc/cgrules.conf:

serviceuser   memory   limitedram/

Это ограничивает использование памяти serviceuser до 6 ГБ.