it-swarm-pt.tech

Por que o Red Hat Linux reporta menos memória livre no sistema do que realmente está disponível?

Eu tenho um servidor Red Hat Linux doméstico relativamente pequeno (cerca de 8 GB de RAM). Eu não o uso para nada além de executar alguns aplicativos criados em casa para acompanhar várias coisas. As únicas coisas reais em execução na caixa são um banco de dados e um servidor web.

Notei que, ao verificar os contadores do sistema usando ferramentas como NMON e TOP, a memória livre total do sistema é relativamente baixa (da ordem de algumas centenas de MB), enquanto a memória ativa do banco de dados e do servidor da Web ainda é baixa (apenas consumir 3 GB combinados). Mesmo ao incluir todos os outros processos em execução, o total de memória consumida é inferior a 4 GB.

Por que o Red Hat Linux reporta menos memória livre que a memória total menos a soma total da memória usada dos processos em execução?

9
Aaron K

Não confunda memória livre com memória não utilizada. Memória livre, no mundo unix, é uma página de memória física que não possui dados lógicos mapeados para ela. A memória não utilizada possui alguns dados mapeados para ela, mas atualmente não está em ativo usado por um processo em execução.

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

O Linux (e todos os sistemas operacionais Unix) tentam ter o mínimo de memória livre possível. Em vez disso, eles usam memória que não é ativamente mapeada para processos no sistema operacional em execução para coisas como cache de arquivos e buffers para várias operações de transferência IO.

Outra coisa que pode confundir você é que você não pode simplesmente adicionar a memória em uso por todos os processos em execução para obter uma memória total em uso. Se você tentasse isso, descobriria rapidamente que seus aplicativos parecem estar usando mais memória do que realmente existe na máquina. Isto é por duas razões

  1. A memória pode ser compartilhada entre vários processos, por meio de Copy-On-Write alocação de memória, IO mapeado na memória e bibliotecas dinâmicas compartilhadas .
  2. O sistema operacional tem a liberdade de prometer mais memória para o aplicativo do que realmente forneceu. A teoria é que a maioria dos criadores de aplicativos prefere solicitar grandes quantidades de memória de uma só vez, para evitar sobrecarga, e pode não usar toda essa memória.

Há um artigo recente em lwn.net discutindo essa questão .

19
Dave Cheney

O Linux armazenará em cache ativamente os acessos do sistema de arquivos na memória para oferecer tempos mais rápidos de acesso ao disco. Não é nada para se preocupar.

Executar free -m na caixa dará uma idéia melhor de onde a memória está sendo usada.

Abaixo está a saída retirada de uma das minhas caixas. A memória livre é 147Meg com quase 4G em cache para solicitações de acesso ao sistema de arquivos.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722
4
Ryaner

Que tipo de kernel você está executando no sistema? Um kernel de 32 bits reportará apenas cerca de 3,6 GB de memória, a menos que compilado com o PAE ativado.

Dizendo que, se esta é uma versão moderna do Redhat Enterprise Linux (ou CentOS) - v3 em diante -, o kernel padrão de 32 bits terá isso ativado.

Se você puder postar a saída do comando 'free' detalhado acima, poderemos ver se esse é o problema.

1
Mike Pountney

Você também está incluindo os campos "em buffer" e "em cache"?

1
jj33

Com o linux, veja Committed_AS em/proc/meminfo, esta é a quantidade de memória (real + swap) que o kernel realmente prometeu executar os processos.

O Linux usa a memória com muita eficiência, qualquer bloco não prometido a algum processo é usado para armazenar em cache arquivos acessados ​​recentemente/com freqüência. Portanto, é típico do Linux usar 90% de toda a memória física disponível, não muito tempo após a inicialização.

Veja o que o kernel se comprometeu a fornecer .. e uso sujo (troca), isso fornece uma visão geral melhor.

Se você precisar ajustar esse comportamento, atualize sua pergunta :)

Este é o MO padrão para Linux. Algumas distribuições Tweak memory management para atender às suas necessidades via sysctl. No entanto, o que você denuncia é bastante típico entre todos.

1
Tim Post