Quando o Linux fica sem memória? [duplicado]

1

Estou tentando estabelecer por que um processo continua parando inesperadamente, e uma possibilidade é que o servidor esteja ficando sem memória, mas não tenho certeza se entendi bem a memória e o Linux.

Pegue a seguinte saída do comando free (tirado da mesma máquina com o problema que estou tentando corrigir):

             total       used       free     shared    buffers     cached
Mem:           991        827        163          0        107        361
-/+ buffers/cache:        358        633
Swap:            0          0          0

A linha superior sugere que esta máquina está realmente usando muita memória (apenas 163 Mb livre) e assim, se mais alguns processos forem acionados (o que eles fazem), poderemos ter uma situação de falta de memória com vários processos sendo morto.

No entanto, sempre fui levado a acreditar que, como o Linux faz grande uso de buffers e caches na memória que podem ser usados, se necessário, que a figura que eu deveria estar prestando mais atenção é a segunda linha que sugere que ~ 633 Mb é grátis, caso em que acho improvável que esta máquina esteja ficando sem memória.

Então, você pode esclarecer minha compreensão do Linux e da memória e me ajudar a entender quando o Linux fica sem memória?

PS - esta máquina é uma máquina de propósito único - ela executa o processo de segundo plano para uma grande aplicação web, isso é tudo o que ela faz. Nenhum servidor web, nenhum banco de dados, apenas um enorme aplicativo Ruby on Rails rodando como um processo em segundo plano. Tarefas agendadas ocasionais são ativadas para tarefas de aplicativos específicos que criariam temporariamente outra instância do aplicativo rails na memória.

    
por aaronrussell 20.01.2014 / 17:13

1 resposta

3

O kernel usa memória RAM que não é utilizada de outra maneira para armazenar em cache os dados lidos do armazenamento - isso é chamado de cache de buffer. Como o buffer-cache é apenas uma cópia do que está no disco rígido, se o kernel precisar de memória para algo mais importante, ele pode simplesmente "esquecer" a cópia desses dados na memória e usá-los para outra coisa. Se algum dia precisar desses dados, basta relê-los da unidade.

Tenha em mente que há o buffer-cache e então há buffers de kernel regulares (para sockets tcp, tabela de roteamento, etc.)

Então, o comando livre na primeira linha mostra: Total: Quanto você tem ram, ponto final. Usado: quanto disso realmente tem algo de valor. Livre: Absolutamente não utilizado - pode não estar vazio, mas o que quer que seja, seria lixo. Compartilhada: Coisas compartilhadas entre processos - bibliotecas amplamente compartilhadas. Buffers: buffers de kernel regulares. Em cache: ostensivamente, o buffer-cache.

Agora, a segunda linha mostra o que é "realmente usado". como em, o que está no carneiro que não pode ser esquecido sem conseqüências. E o campo "livre" na segunda linha é a soma do RAM não utilizado e do buffer-cache.

A última linha incluiria espaço de swap - espaço de armazenamento em que o kernel pode gravar informações importantes na memória, para que possa usar essa localização de memória para outra coisa. Mas, pela sua captura de tela, você não tem configurado.

Neste momento, parece que você está usando um sólido ~ 360MB do seu 1GB. Se você estiver preocupado ou suspeitar que está ficando sem memória, verifique as mensagens de log do kernel. O kernel registrará quando tiver atingido uma situação absolutamente sem memória e algo a fazer. Ele invocará o assassino de memória com a esperança de que ele possa salvar a situação eliminando um processo.

Eu inicialmente pensei que isso era um VPS. Se é um servidor físico e você não tem RAM extra, você pode adicioná-lo, então considere adicionar espaço de swap!

Caso contrário, verifique / var / log para mensagens de log ou na linha de comando, apenas use o dmesg para verificar as últimas mensagens do kernel.

    
por 20.01.2014 / 17:55