Como obter memória usada (RAM usada) usando o comando Linux?

30

Estou tentando recuperar a memória usada (RAM) em porcentagem usando comandos do Linux. Meu cpanel mostra a memória usada, que eu preciso exibir em uma página específica.

Nos fóruns, descobri que a memória correta pode ser encontrada a partir do seguinte:

free -m

Resultado:

-/+ buffers/cache:        492       1555

- / + buffers / cache: contém o uso correto da memória. Não sei como analisar essas informações ou se existe algum comando diferente para obter a memória usada em porcentagem.

codelogn
fonte
3
Isso já foi respondido por aqui! stackoverflow.com/questions/10585978/… por exemplo: free | grep Mem | awk '{print $4/$2 * 100.0}'
szboardstretcher
@szboardstretcher Gosto desta:$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'
Simply_Me
Sem saber o que você precisa, é difícil dizer qual número você deve usar. No entanto, em muitos casos, qualquer um desses números é muito ingênuo e requer informações de tendência e contexto.
Eckes

Respostas:

33

Aqui está um exemplo de saída gratuita:

% free
             total       used       free     shared    buffers     cached
Mem:      24683904   20746840    3937064     254920    1072508   13894892
-/+ buffers/cache:    5779440   18904464
Swap:      4194236        136    4194100

A primeira linha de números ( Mem:) lista

  • total memória
  • used memória
  • free memória
  • uso de shared
  • uso de buffers
  • caches do sistema de arquivos de uso ( cached)

Nesta linha used inclui os buffers e cache e isso afeta livre. Essa não é a sua memória livre "verdadeira", porque o sistema fará o dump do cache, se necessário, para satisfazer solicitações de alocação.

A próxima linha ( -/+ buffers/cache:) nos fornece a memória real usada e livre como se não houvesse buffers ou cache.

A linha final ( Swap) fornece o uso de memória swap. Não há buffer ou cache para troca, pois não faria sentido colocar essas coisas em um disco físico.

Para gerar a memória usada (menos buffers e cache), você pode usar um comando como:

% free | awk 'FNR == 3 {print $3/($3+$4)*100}'
23.8521

Isso pega a terceira linha e divide usado / total * 100.

E para memória livre:

% free | awk 'FNR == 3 {print $4/($3+$4)*100}' 
76.0657
Casey
fonte
1
"- / + buffers / cache: 5779440 18904464" está correto no uso da RAM / status do servidor?
Codelogn 26/08/14
2
Estritamente falando, não, mas praticamente falando, sim. O uso real da memória é a segunda linha (usada: 20746840), mas parte desse uso da memória são buffers e cache, que são apenas para acelerar os tempos de resposta no sistema. A terceira linha (usada: 5779440) fornece a quantidade de memória realmente usada pelos programas e é essa figura de memória que determina quanto mais seus programas podem alocar. Se seu objetivo é obter memória livre / usada no sentido de quais programas estão realmente usando e o que você pode realmente alocar, então sim, a linha 3 está correta para você.
casey
1
Observe que nas versões mais recentes de free, -/+ buffers/cacheé completamente omitido intencionalmente, e o valor mostrado na usedcoluna agora exclui os buffers e o cache por padrão. Veja aqui: bugzilla.redhat.com/show_bug.cgi?id=1158828
jdgregson
10

Vou mencionar como analisar as informações sob freecomando. Para encontrar a porcentagem, você pode usar como sugerido nas outras 2 respostas.

Isto está claramente explicado aqui . Eu tentaria explicar pelo que tenho no meu sistema.

free -m
             total       used       free     shared    buffers     cached
Mem:          7869       4402       3466          0        208       3497
-/+ buffers/cache:        696       7173
Swap:         3999        216       3783

Agora, vamos ver o que os vários números realmente representam.

Linha 1

  • 7869 Indica memória / RAM física disponível para minha máquina.
  • 4402 Indica a memória / RAM usada pelo meu sistema.
  • 3466 Indica o total de RAM livre e disponível para execução do novo processo.
  • 0 Indica memória compartilhada. Esta coluna está obsoleta e pode ser removida em versões futuras do free.
  • 208 Indica RAM total em buffer por diferentes aplicativos no Linux.
  • 3497 Indica RAM total usada para armazenamento em cache de dados para fins futuros.

Linha 2

-/+ buffers/cache:        696       7173

Como calcular os valores 696 e 7173 obtidos na Linha2?

Total usado ( 4402 ) - RAM total do buffer ( 208 ) - RAM total para armazenamento em cache ( 3497 ) deve constituir a RAM real usada no sistema. Ele me retorna 697, que é a saída real de RAM usada na segunda linha.

Agora, total disponível ( 7869 ) - reais usados ( 696 ) deve dar-lhe a memória livre que é 7173 , neste caso, que é também tem como saída na segunda linha.

Ramesh
fonte
6

Embora seja uma duplicata, como apontado por @szboardstretcher, minha preferência das soluções (na pergunta original) é a abaixo, especialmente porque você deseja analisar uma página da web.

$ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}'

Saída:

used: 82.68%, buffers: 42.81%, swap: 1.27%
Simplesmente eu
fonte
4
Para sua informação, eu recebo o seguinte usando istoused: 96.00%, buffers: 26.53%awk: (FILENAME=- FNR=4) fatal: division by zero attempted
kellyfj
Qual é o comando completo usado? Eu verifiquei em centos.
Simply_Me
Desculpem a formatação, mas aqui vai$ cat /etc/issue CentOS release 6.7 (Final) $ free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%"), $3/$2*100}' used: 12.91%, buffers: 96.24%awk: (FILENAME=- FNR=4) fatal: division by zero attempted $ free total used free shared buffers cached Mem: 15429704 1991416 13438288 164 151556 1259584 -/+ buffers/cache: 580276 14849428 Swap: 0 0 0
kellyfj
Para algumas versões do awk (mawk), o sinal de porcentagem precisa ser dobrado para imprimi-lo; caso contrário, o awk gera um erro, como este: printf ("used:% .0f %%"), $ 3 / $ 2 * 100 Isso funciona com mawk e gawk.
Ján Lalinský
2
free | awk '/Mem/{printf("used: %.2f%"), $3/$2*100} /buffers\/cache/{printf(", buffers: %.2f%"), $4/($3+$4)*100} /Swap/{printf(", swap: %.2f%\n"), $3/$2*100}' 

Adiciona uma nova linha após o número da troca

Andy
fonte
1

Para até o CentOS 7, você pode tentar

cat /proc/meminfo 

para ver o uso real da memória pelos processos.

Cosmo Arun
fonte