Recusar malloc para aplicação com fome de memória

4

É possível negar malloc em vez de matar o processo selecionado pelo killer da OOM? Eu acho que fora da memória pode ser pelo menos registrado pelo processo que é melhor do que ser morto. Além disso, parte do problema é que o sistema não responde por muito tempo (alguns minutos) antes de matar o processo ofensivo.

Os grupos de controle são melhores ferramentas para garantir a memória de outros processos?

    
por sevo 22.09.2016 / 13:51

1 resposta

3

Você pode definir limites antes de iniciar o processo. Por exemplo, defina o limite de memória virtual (soft) para o shell atual como 1G

ulimit -S 1048576

Você também pode definir esses limites em todo o sistema, por exemplo, eu tenho isso:

  • /etc/security/limits.conf:

    *               soft    as             25165824
    *               hard    as             25165824
    
  • /etc/systemd/system.conf:

    DefaultLimitAS=25769803776
    

Para limitar todos os processos a 24G nos meus sistemas 32G. Embora dois processos juntos ainda possam causar essa situação de OOM, isso nunca aconteceu na prática.

Em relação a "não responder por muito tempo antes de matar o processo ofensivo":

  • Não use uma partição swap, então as coisas serão eliminadas rapidamente.

Note que, na verdade, o malloc (memória virtual) não é o problema real. OOM acontece apenas quando o processo começa a usar essa memória malloc'ed. Infelizmente no Linux você não pode limitar a memória residente. Veja "supercomprometimento de memória":

por 22.09.2016 / 14:55