web-dev-qa-db-fra.com

Comment obtenir% utilitaire de mémoire avec vmstat?

J'ai besoin d'une utilisation en mémoire en% de Vmstat, mais je ne comprends pas tout à fait partie des numéros relatifs à la mémoire affichée dans VMSTAT.

En particulier, donné une sortie comme celle-ci

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

Quelle est la quantité de mémoire totale du système? Est-ce que c'est 'SWPD' + 'GRATUIT' + 'Buff' + 'cache', qui total à 1620612?

Quelle est la quantité libre de mémoire du système? Est-ce 45396, comme affichée dans la colonne "Free"?

Le problème est qu'ils ne montent pas ni même se rapprochent de ce que "haut" rapporté. La sortie du "haut" que j'ai prise à peu près au même moment que 'vmstat ci-dessus est:

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

Alors ... je suppose qu'il doit y avoir des chiffres cachés/des options dans 'vmstat' que je ne savais pas?

J'ai besoin d'utiliser 'vmstat' à cet effet et non aux autres commandes, car c'est ce que l'exigence énoncée.

Donc, idéalement, ce que je veux réaliser de 'vmstat' est le% de l'utilisation de la mémoire, comme dans:

<used_memory>/<total_memory> * 100%.

Merci!

9
His

Ce que vous cherchez est la sortie de "gratuit":

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

Voici une tournée:

Ceci est une boîte avec 768 Mo de physique RAM et une partition de swap 500344KB.

759456KB est "utilisé" (deuxième colonne, rangée supérieure). De cette mémoire "utilisée", 23132KB sont des tampons (5ème colonne, une rangée supérieure) et 592484Kb (sixième colonne, rangée supérieure) correspond au cache, laissant 144840kb (2e colonne, 2e rangée) de mémoire physique utilisée par des processus actifs.

Lorsque vous considérez que la mémoire utilisée par les tampons et le cache pouvait être utilisée pour les processus, qui laisse 630716kb (3ème colonne, 2e rangée) de la mémoire physique.

La partition de swap, comme je l'ai dit, est 500344KB (1ère colonne, rangée inférieure). 21972KB (2e colonne, rangée inférieure) du fichier d'échange est utilisée, laissant 478372kb (3ème colonne, rangée inférieure) gratuite.

Donc, votre définition de la mémoire gratuite dépend de si vous comptez des tampons et du cache ou non, et si vous comptez échangez ou non.

Cela devrait vous donner assez pour continuer à calculer un pourcentage comme vous le voyez.


Voici la sortie de haut et gratuit:

$ 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

Vous pouvez voir la meilleure et la liberté d'accord (bien qu'avec une petite différence-- Ceci est une machine multi-utilisateur et l'utilisation de la mémoire du haut et des programmes gratuits sont reflétées là-bas).


Ajoutez un "-s" lorsque vous appelez VState et vous verrez beaucoup la même sortie, juste sous une forme différente:

$ 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

Vous pouvez voir que vmstat montre tous les mêmes numéros que gratuits.

20
Evan Anderson

J'ai la même question avec vous et proposez une formule

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}'

Je l'ai testé sur la version VMStat de PROCPS-NG 3.3.10 et VMSTAT de PROCPS-NG 3.3.9

2
Chienchi Lo

Je vous recommanderais que vous lisiez à travers ces directives IBM Redbook "Linux Performances et Tuning Guidelines" ( http://www.redbooks.ibm.com/abstract/redp4285.html?open ). Il a des détails sur les données renvoyées par de nombreuses commandes et devraient vous aider.

J'ai généralement utilisé la commande "GRATUITE" sous Linux ou "CAT/PROC/MEMINFO".

1
Aaron Bush

Voici un [~ # ~ # ~] posix [~ # ~] Fonction de coquille qui arrondit le pourcentage souhaité vers le biais de l'entier le plus proche (à des fins de script, cela peut être plus utile, car [~ # # ~] posix [~ # ~] shell arithmétique comparer les tests fonctionnent uniquement avec des entiers):

# Vmstat (derived) Used Ram Percent
vurp() { vmstat -s | { read a b ; read c d ; echo $((100*$c/$a)) ; } ; }
vurp

Sortie (sur mon système):

12

Même chose, avec free:

furp() { free | { read z; read a b c d; echo $((100*$c/$b)) ; } }
0
agc