Como obter% de uso de memória com o vmstat?

8

Eu preciso obter um uso de memória em% do vmstat, mas não entendo muito bem alguns dos números relacionados à memória exibida no vmstat.

Em particular, dado um resultado como este

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0 139728  45396 199128 1236360    1    2     4   622    3    1 51  4 43  2  0

Qual é a quantidade total de memória do sistema? É 'swpd' + 'free' + 'buff' + 'cache', que totalizam 1620612?

Qual é a quantidade livre de memória do sistema? É 45396, conforme exibido na coluna 'livre'?

O problema é que eles não somam ou até mesmo parecem próximos do que 'top' reportou. A saída de 'top' que eu tirei na mesma hora que 'vmstat's acima é:

[...]
Mem:   4059616k total,  3965504k used,    94112k free,   200020k buffers
[...]

Então ... eu estou supondo que deve haver números / opções ocultas em 'vmstat' que eu não conhecia?

Eu preciso usar 'vmstat' para essa finalidade e não outros comandos, já que isso é o que o requisito afirmou.

Então, idealmente, o que eu quero alcançar em 'vmstat' é o% de uso de memória, como em:

<used_memory>/<total_memory> * 100%.

Obrigado!

    
por His 09.07.2009 / 04:07

3 respostas

20

O que você está procurando é a saída de "free":

$ free
             total       used       free     shared    buffers     cached
Mem:        775556     759456      16100          0      22132     592484
-/+ buffers/cache:     144840     630716
Swap:       500344      21972     478372

Aqui está um tour:

Esta é uma caixa com 768MB de RAM física e uma partição swap de 500344KB.

759456 KB é "usado" (segunda coluna, linha superior). Dessa memória "usada", 23132 KB são buffers (5ª coluna, linha superior) e 592484 KB (sexta coluna, linha superior) são cache, deixando 144840 KB (2ª coluna, 2ª linha) de memória física sendo usada por processos ativos. p>

Quando você considera que a memória usada por buffers e cache pode ser usada para processos, isso deixa 630716KB (3ª coluna, 2a linha) de memória física livre.

A partição swap, como eu disse, é de 500344 KB (1ª coluna, linha de baixo). 21972 KB (2ª coluna, linha de baixo) do arquivo de troca está em uso, deixando 478372 KB (3ª coluna, linha de baixo) livre.

Assim, sua definição de% free memory depende se você está contando buffers e cache ou não, e se você está contando swap ou não.

Isso deve dar a você o suficiente para calcular uma porcentagem como achar melhor.

Aqui está a saída de top e free:

$ top -n1 | grep "used," ; free
Mem:    775556k total,   751472k used,    24084k free,    20776k buffers
Swap:   500344k total,    21972k used,   478372k free,   586648k cached

             total       used       free     shared    buffers     cached
Mem:        775556     751344      24212          0      20776     586648
-/+ buffers/cache:     143920     631636
Swap:       500344      21972     478372

Você pode ver como top e free concordam (embora com um pouco de diferença - esta é uma máquina multiusuário e o uso de memória dos programas principais e gratuitos se reflete nela).

Adicione um "-s" quando você chamar o vmstate, e você verá a mesma saída, apenas de uma forma diferente:

$ vmstat -s ; free
       775556  total memory
       759920  used memory
       674680  active memory
        18440  inactive memory
        15636  free memory
        21892  buffer memory
       594372  swap cache
       500344  total swap
        21972  used swap
       478372  free swap
       ... output truncated ...

             total       used       free     shared    buffers     cached
Mem:        775556     759920      15636          0      21892     594372
-/+ buffers/cache:     143656     631900
Swap:       500344      21972     478372

Você pode ver que o vmstat está exibindo os mesmos números que o livre.

    
por 09.07.2009 / 04:30
2

Eu tenho a mesma pergunta com você e crie uma fórmula

vmstat -s | awk  ' $0 ~ /total memory/ {total=$1 } $0 ~/free memory/ {free=$1} $0 ~/buffer memory/ {buffer=$1} $0 ~/cache/ {cache=$1} END{print (total-free-buffer-cache)/total*100}'

Eu testei na versão vmstat do procps-ng 3.3.10 e vmstat do procps-ng 3.3.9

    
por 17.08.2016 / 00:51
1

Eu recomendo que você leia este IBM Redbook "Linux Performance and Tuning Guidelines" ( link ). Ele tem detalhes sobre os dados retornados por vários comandos e deve ajudá-lo.

Eu normalmente usei o comando "free" no Linux ou "cat / proc / meminfo".

    
por 09.07.2009 / 04:28