2010-09-24 4 views
38

j'ai une machine Linux dont l'instantané mémoire quand je fais/proc/meminfo est:Vous voulez savoir si suffisamment de mémoire est libre sur une machine Linux pour déployer une nouvelle application

MemTotal:  16413388 kB 
**MemFree:   48296 kB** 
Buffers:  193600 kB 
Cached:  1986448 kB 
SwapCached:  874512 kB 
Active:  15034264 kB 
Inactive:  713672 kB 
HighTotal:   0 kB 
HighFree:   0 kB 
LowTotal:  16413388 kB 
LowFree:   48296 kB 
SwapTotal:  8385920 kB 
SwapFree:  4682408 kB 
Dirty:   3124 kB 
Writeback:   0 kB 
Mapped:  13005560 kB 
Slab:   257784 kB 
CommitLimit: 16592612 kB 
Committed_AS: 59624324 kB 
PageTables:  233748 kB 
VmallocTotal: 536870911 kB 
VmallocUsed: 267064 kB 
VmallocChunk: 536603555 kB 
HugePages_Total:  0 
HugePages_Free:  0 
Hugepagesize:  2048 kB 

Ceci est un 16 Go machine et j'ai une application Java à déployer sur ce qui aura 3 instances jvm et l'exigence de mémoire typique combinée pour eux sera proche de 1 Go.

Je voulais savoir s'il est sûr de déployer cette application sans affecter les autres applications en cours d'exécution sur cette machine. En regardant l'instantané de la mémoire ci-dessus pouvons-nous savoir?

Quelles autres statistiques m'aideront à décider de la façon de collecter ces statistiques et comment?

+1

Vous connaissez la commande 'free'? –

+0

les statistiques de la commande libre sont les mêmes que celles données par/proc/meminfo – Manish

Répondre

123

(Il est probablement un peu en retard pour l'OP, mais on demande assez souvent, donc je vais donner un coup de feu)

free montre normalement quelque chose comme ceci:

   total  used  free  shared buffers  cached 
Mem:  8195284 8137708  57576   0 1232328 2651156 
-/+ buffers/cache: 4254224 3941060 
Swap:  18892216  759852 18132364 

Les gens ont tendance pour regarder la ligne Mem: lorsque vous essayez de savoir combien de mémoire libre ils ont. Malheureusement, cette ligne est tout à fait induire en erreur, car le noyau Linux tente de faire une utilisation optimale de la mémoire disponible dans (au moins) ces moyens:

  • Il cache les données du sous-système E/S (par exemple le disque) , de sorte qu'il sera facilement disponible si nécessaire.

  • Il va activement expulser les processus qui ont été inactifs pendant un certain temps dans l'espace d'échange, en faveur de la mise en cache des données pour les processus actifs. Cela tend à favoriser le débit par rapport à la réactivité, donc certaines personnes adaptent leur noyau pour changer ce comportement.

Le premier point est la source de confusion en ce qui concerne free, parce que la ligne Mem: comprend la mémoire utilisée pour la mise en cache de la quantité de mémoire utilisée. Le noyau, cependant, mettra en cache autant que possible pour des raisons de performances. En fait, sur n'importe quel système Linux installé depuis un certain temps, la mémoire libre a tendance à être proche de zéro - la mémoire inutilisée est gaspillée en mémoire.

La mémoire cache, cependant, peut être libérée par le noyau si nécessaire par un autre processus. Bien que cela ait un impact sur les performances d'E/S, les autres processus peuvent avoir plus de mémoire sans utiliser l'espace d'échange. Par conséquent, pour la plupart des intentions, cette mémoire est libre.

C'est pourquoi free comprend une deuxième ligne, où la mémoire cache est considéré comme libre:

-/+ buffers/cache: 4254224 3941060 

Cette deuxième ligne est ce que les gens devraient regarder quand ils veulent savoir si elles ont suffisamment de mémoire pour une certain but.

Dans l'exemple ci-dessus, selon la ligne Mem:, il y a ~ 57 Mo de mémoire libre. Si l'on lit la deuxième ligne, cependant, il y a en fait environ 3,9 GB qui peut être utilisé sans forcer les processus actifs à échanger.En tant que sidenote, il y a aussi environ 760 Mo de données rarement utilisées qui ont été échangées, pour faire plus d'espace dans la mémoire principale pour les processus et la mise en cache.

À peu près en même temps, le contenu de /proc/meminfo:

MemTotal:  8195284 kB 
MemFree:   57660 kB 
Buffers:   1232352 kB 
Cached:   2651156 kB 
SwapCached:  119936 kB 
. 
. 
. 

MemTotal: la mémoire physique disponible détectée par le noyau.

MemFree: la mémoire physique inutilisée - la mémoire libre affichée dans la ligne Mem: de free.

Buffers: stockage relativement temporaire des blocs de disque bruts.

Cached: cache en mémoire pour les fichiers lus sur le disque. Il n'inclut pas la mémoire SwapCached.

SwapCached: mémoire qui a été échangée une première fois, puis réinsérée mais qui se trouve toujours dans l'espace d'échange. Si nécessaire, son contenu peut être simplement jeté (très vite!), Sans avoir à les échanger (plus lent).

donc, d'avoir une estimation semi-précise de la mémoire qui est effectivement disponible

MemFree + Buffers + Cached + SwapCached 

est un bon point de départ - et les spectacles dans un free cette deuxième ligne.

Naturellement, la gestion de la mémoire et les statistiques et mesures connexes sont plus compliquées que cela. Les chiffres indiqués par free sont au mieux de simples estimations, car il y a beaucoup d'autres variables à prendre en compte si vous voulez aller plus loin. Pour les personnes qui effectuent régulièrement l'optimisation de l'utilisation de la mémoire, il s'agit presque d'une forme d'art.

EDIT:

Un lien peu humoristique sur cette "question":

http://www.linuxatemyram.com/

EDIT 2:

Pour confirmer le commentaire sur l'analyse de l'utilisation de la mémoire presque être une forme d'art :

Même free manque un morceau majeur de données mises en cache sur les systèmes Linux modernes. De /proc/meminfo sur mon système:

SReclaimable: 2253576 kB 

C'est d'environ 2 Go de mémoire utilisée par le système slab allocateur pour les entrées du répertoire de mise en cache et tel et il est reclaimable (à-dire qu'elle peut être effacée et utilisée par des processus si nécessaire). Pourtant free ne considère pas qu'il cache la mémoire et ne l'entre pas dans aucun de ses calculs et par conséquent il apparaît comme mémoire utilisée.

L'utilitaire slabtop, s'il est disponible, permet à l'administrateur système de savoir à quoi sert le cache slab.

Un moyen (pour l'utilisateur racine uniquement) pour avoir free montrent l'utilisation de la mémoire réelle du système est le suivant:

# swapoff -a 
# sync 
# echo 3 > /proc/sys/vm/drop_caches 
# free 
      total  used  free  shared buffers  cached 
Mem:  8195284 3181468 5013816   0  8656  228832 
-/+ buffers/cache: 2943980 5251304 
Swap:   0   0   0 
# swapon -a 

La première commande désactive l'espace d'échange. Il ne devrait pas être émis si la mémoire disponible peut ne pas suffire à contenir les données qui ont été échangées - dans ce cas, il faut prendre en compte la ligne Swap: libre dans leurs calculs d'utilisation de la mémoire.

La deuxième commande pousse toutes les données mises en mémoire tampon sur le disque. Cela permet de libérer davantage de mémoire cache à l'étape suivante.

La troisième commande est la plus importante de l'ensemble - elle force le noyau à rejeter autant de données en cache que possible (cache de page, entrées de répertoire, inodes, etc.).

Ensuite, free montre enfin ce que les processus en cours d'utilisation utilisent réellement dans sa ligne -/+ buffers/cache:. Il est tout à fait remarquable que même après avoir supprimé toutes les données mises en cache, le noyau redémarre rapidement la mise en cache - dans ce cas, il a déjà atteint près de 250 Mo de données en cache en quelques secondes.

La commande finale active à nouveau l'espace de permutation - elle n'est nécessaire que si la première commande a également été utilisée.

Il est à noter que ces commandes doivent être exécutées par l'utilisateur root pour avoir les privilèges nécessaires.

+2

+1 bien répondu – willjcroz

+0

Excellente réponse, merci! – greg

Questions connexes