(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.
Vous connaissez la commande 'free'? –
les statistiques de la commande libre sont les mêmes que celles données par/proc/meminfo – Manish