Liberação do uso geral de memória para processos filhos

2

Eu tenho um script de longa duração que lança vários processos filhos em uma máquina Linux com 8 GB de memória. Depois de algumas horas de execução, ele ocupa quase 90% da memória e isso faz com que outros serviços, como o SSH, não respondam ao iniciar 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 muito diferentes de memória, por isso seria muito ineficiente definir limites fixos.

O ideal é que eu simplesmente especifique "use somente até 75% da memória" e deixe o sistema dividir entre as crianças conforme necessário, para garantir que eu ainda possa conectar o SSH à máquina a qualquer momento. Primeiro, tentei configurar um cron job para renunciar automaticamente o sshd à prioridade mais alta, mas isso não teve efeito, e estou rotineiramente incapaz de conectar o SSH, ou o prompt do SSH está inutilmente lento.

    
por Cerin 08.04.2014 / 17:49

1 resposta

2

Execute os processos como um usuário dedicado e configure-o por meio de cgroups :

/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 de serviceuser a 6 GB.

    
por 08.04.2014 / 18:00