Como o Landscape calcula o uso da memória?

6

Eu estou tentando depurar uma situação OOM em um servidor Ubuntu 12.04, e olhando para os gráficos de memória no Landscape, notei que não houve nenhum pico de uso de memória grave. Então olhei para a saída do comando free e não tinha certeza de como os dois resultados de uso de memória se relacionam.

Veja a saída do cenário no servidor:

$ landscape-sysinfo 
  System load:  0.0               Processes:           93
  Usage of /:   5.6% of 19.48GB   Users logged in:     1
  Memory usage: 26%               IP address for eth0: -
  Swap usage:   2%

Em seguida, executei o comando free e obtive:

$ free -m
             total       used       free     shared    buffers     cached
Mem:           486        381        105          0          4        165
-/+ buffers/cache:        212        274
Swap:          255          7        248

Eu posso entender o uso de swap de 2%, mas de onde vem o uso de 26% de memória?

    
por David Planella 29.11.2012 / 11:12

3 respostas

9

na paisagem

landscape-sysinfo obtém seus dados diretamente de /proc/meminfo :

dpb@helo:~$ cat /proc/meminfo |egrep 'MemTotal:|Active:'
MemTotal:       12286760 kB
Active:          3794832 kB
dpb@helo:~$

O cálculo de "Uso da memória" neste caso seria:

((MemTotal - Active) / MemTotal) * 100

Você pode ver esses cálculos em:

/usr/share/pyshared/landscape/sysinfo/memory.py
/usr/share/pyshared/landscape/lib/sysstats.py

obtém seus dados diretamente de /proc/meminfo :

Em livre

O utilitário free também obtém seus dados diretamente de /proc/meminfo :

Mem

  • total: MemTotal
  • usado: MemTotal - MemFree
  • gratuito: MemFree
  • buffers: Buffers
  • em cache: Cached

Buffers / cache

  • usado: MemTotal - MemFree - Buffers - Cached
  • gratuito: MemFree + Buffers + Cached

Trocar

  • total: SwapTotal
  • usado: SwapTotal - SwapFree
  • gratuito: SwapFree

Total

  • total: MemTotal + SwapTotal
  • usado: MemTotal - MemFree + SwapTotal - SwapFree
  • gratuito: MemFree + SwapFree

Corrigido em cache - lzap

    
por dpb 29.11.2012 / 16:28
3

Esses gráficos não refletem cada evento de alocação / liberação de memória, mas amostras de /proc/meminfo (exatamente como dpb descrito) em determinados intervalos. Uma explicação levemente especulativa para o motivo pelo qual ele não está sendo mostrado no gráfico seria que ele simplesmente ocorria entre pontos quando o uso de memória era amostrado.

Eu suspeito que o que aconteceu aqui é que algum processo adquiriu muita memória com pressa e o OOM eliminou isso antes que uma amostra pudesse ser feita. Isso seria uma circunstância bastante extrema, e também uma que significaria que a máquina inteira estava rodando lentamente, já que estava trocando muito. Esse carregamento na máquina reduziria a probabilidade de o sistema ter tempo disponível para testar o uso de memória durante essa janela e reportá-lo ao servidor Landscape.

    
por tealeg 30.11.2012 / 11:58
0

Para adicionar a resposta correta do dpb, precisamos definir a diferença entre os tipos de memória. Indo na documentação do redhat sobre / proc / meminfo :

As principais definições a serem usadas:

  • A memória Ativo é usada recentemente e não deve ser substituída pelo sistema operacional quando novas páginas forem inseridas.
  • MemTotal é quanto memória usável o seu sistema possui (memória física menos uma pequena quantidade de memória usada para o código do kernel).
  • MemFree é a memória não usada atualmente na memória. A memória usada como cache de disco não é gratuita.
  • MemUsed é a memória usada = MemTotal - MemFree.
  • Em cache é a memória usada como um cache para arquivos no disco - se você leu um arquivo do disco recentemente, talvez veja de novo em um futuro próximo, então vamos mantê-lo na memória quando estiver disponível (como essencialmente livre e pode acelerar drasticamente o seu computador, pois as leituras do disco levam vários milissegundos, enquanto as leituras da memória levam microssegundos ou menos).
  • Buffers é um buffer para os dispositivos IO localizados - por exemplo, quando você altera os valores de um arquivo, ele primeiro é salvo nos buffers (em sua memória principal) e depois as alterações são gravadas no disco como gravar no disco é lento. Essa memória buffer é curta e minúscula nos kernels modernos. (Concedido que a distinção entre cache / buffers é menos clara no kernel moderno do Linux, veja [1] ).
  • MemUsed - Buffers / Cached (primeiro número na segunda linha de livre) é a quantidade de memória usada pelos seus processos. Essa quantidade de memória está sendo usada ignorando o cache de disco (que seu sistema está livre para escrever em excesso).

Você poderia facilmente ter mais memória ativa do que MemUsed - Buffers / Cached. Esse cenário pode ocorrer quando você acessa com frequência partes do disco que foram armazenadas em cache na memória. Da mesma forma, você poderia ter processos que alocaram memória, mas não usaram essa memória alocada recentemente - talvez seja o ideal mover essa memória alocada para swap se precisar de mais memória.

    
por dr jimbob 22.08.2013 / 17:03