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