
Tenho um script de longa execução que inicia vários processos filhos em uma máquina Linux com 8 GB de memória. Após algumas horas de execução, ele ocupa quase 90% da memória, e isso faz com que outros serviços, como o SSH, parem de responder quando inicia a troca de disco.
Qual é a melhor maneira de limitar programaticamente o uso geral de memória para meu script e todos os processos filhos, sem definir um limite de memória específico para cada processo individualmente? Diferentes processos filhos podem usar quantidades de memória muito diferentes, portanto seria muito ineficiente definir limites fixos.
Idealmente, eu gostaria de simplesmente especificar "usar apenas até 75% da memória" e deixar o sistema dividir isso entre os filhos conforme necessário, para garantir que ainda possa usar SSH na máquina a qualquer momento. Tentei primeiro configurar um cron job para atualizar automaticamente o sshd para a prioridade mais alta, mas isso não teve efeito, e rotineiramente não consigo fazer o SSH, ou o prompt do SSH é inutilmente lento.
Responder1
Execute os processos como um usuário dedicado e configure-os viagrupos:
/etc/cgconfig.conf
:
group limitedram {
memory {
memory.limit_in_bytes = 6442450944;
}
}
e /etc/cgrules.conf
:
serviceuser memory limitedram/
Isso limita o uso de memória serviceuser
a 6 GB.