O que acontece se uma distro Linux for instalada sem troca e quando estiver quase sem RAM, executa um novo aplicativo? [duplicado]

0

O que acontece se um Linux, digamos, Arch Linux ou Debian, for instalado sem uma partição de troca ou um arquivo de troca. Então, quando executando o sistema operacional enquanto quase sem memória RAM, o usuário abre um novo aplicativo. Considerando que este novo aplicativo precisa de mais memória RAM do que o necessário, o que acontecerá?

Qual parte do sistema operacional lida com as operações de gerenciamento de RAM, e posso configurá-lo para se comportar de maneira diferente?

    
por eye 29.04.2018 / 16:24

3 respostas

2

O kernel do Linux tem um componente chamado OOM killer (sem memória). Como Patrick apontou nos comentários, o killer da OOM pode ser desabilitado, mas a configuração padrão é permitir o overcommit (e, portanto, habilitar o killer da OOM).

As aplicações pedem ao kernel mais memória e o kernel pode se recusar a fornecê-lo (porque não há memória suficiente ou porque ulimit foi usado para negar mais memória ao processo). Se overcommit for ativado, um aplicativo pediu por alguma memória e recebeu a quantia, mas se o aplicativo gravar em uma nova página de memória (pela primeira vez) e o kernel tiver que alocar memória para isso, mas não puder fazer isso, o kernel tem que decidir qual processo matar para liberar memória.

O kernel prefere matar novos processos que os antigos, especialmente aqueles que (junto com seus filhos) consomem muita memória. Então, no seu caso, o novo processo pode começar, mas provavelmente seria o que seria morto.

Você pode usar os arquivos

/proc/self/oom_adj
/proc/self/oom_score
/proc/self/oom_score_adj

para verificar as configurações atuais e dizer ao kernel em que ordem deve matar os processos, se necessário.

    
por 29.04.2018 / 16:31
0

Tenha em mente que o kernel pode lançar páginas de texto para ter mais espaço na memória. Páginas de texto são memória que contém código executável. Isso pode causar uma espécie de surra, pois as páginas são jogadas fora e, em seguida, carregadas de arquivos executáveis no disco.

    
por 29.04.2018 / 19:17
0

A resposta de Hauke Laging foca-se no assassino de processos "sem memória" e mal menciona o fato de que as coisas podem simplesmente falhar. Você menciona um cenário em que “o usuário abre um novo aplicativo”. O mecanismo padrão para “uma nova aplicação” ser aberta é para algum processo (normalmente um shell ou um gerenciador de janelas) para “fork”, para criar um novo processo que é uma cópia do existente, e para o novo processo chamar "exec", para substituir-se com o novo programa. Qualquer um pode falhar por falta de memória.

De fork (2) :

ERRORS

(i.e., list of possible failure conditions)

       ︙

    ENOMEM

      fork() failed to allocate the necessary kernel structures because memory is tight.

       ︙

E, da mesma forma, execve (2) :

       ︙

    ENOMEM

      Insufficient kernel memory was available.

       ︙

Esta pesquisa do Google mostra outras funções do sistema que pode retornar o erro "ENOMEM".

Portanto, é possível que você (o usuário) simplesmente receba uma mensagem de erro quando você tenta iniciar um novo programa em execução, ou inicie uma nova atividade quando a memória estiver baixa.

    
por 02.05.2018 / 04:12