(C'est probablement un peu tard pour l'OP, mais ce n'est demandé assez souvent, donc je vais donner un coup de feu)
free
affiche 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 à regarder l' Mem:
ligne en essayant de trouver de quelle quantité de mémoire libre qu'ils ont. Malheureusement, cette ligne est tout à fait trompeur, car le noyau Linux essaie de faire une utilisation optimale de la mémoire disponible dans (au moins) de ces façons:
Il va mettre en cache les données de l'I/O sous-système (par exemple le disque), de sorte qu'il sera rapidement disponible en cas de besoin.
Il cherchera activement à expulser les processus qui ont été inactifs pendant un certain temps à l'espace d'échange, en faveur de la mise en cache des données pour les processus actifs. Cela tend à privilégier le débit de plus de réactivité, de sorte que certaines personnes accordent leur noyau pour changer ce comportement.
Le premier point est la source de confusion quant à l' free
, parce que l' Mem:
ligne comprend la mémoire utilisée pour la mise en cache de la mémoire utilisée montant. Le noyau, cependant, la mise en cache sera, autant que possible, pour des raisons de performances. En fait, sur n'importe quel système Linux qui a été en place pendant un certain temps, la mémoire libre a tendance à être proche de zéro - mémoire non utilisé est perdu la mémoire.
La mémoire cache, cependant, peut être libéré par le noyau si nécessaire par un autre processus. Alors qu'il aura un impact sur les performances I/O d'un diplôme, d'autres processus peuvent disposer de plus de mémoire , sans l'aide de l'espace de swap. Par conséquent, pour la plupart des fins utiles, que la mémoire est libre.
C'est pourquoi, free
comprend une deuxième ligne de, où les la mémoire cache est considéré comme libre:
-/+ buffers/cache: 4254224 3941060
Cette deuxième ligne est ce que les gens regardent quand ils veulent savoir s'ils disposent de suffisamment de mémoire libre pour un certain but.
Dans l'exemple ci-dessus, selon la Mem:
ligne il y a ~57 MO de mémoire libre. Si on lit la deuxième ligne, cependant, il y a en effet environ 3,9 GO qui peut être utilisé sans forcer processus actifs sur le swap. Au passage, il y a aussi environ 760 MO de, rarement utilisé, les données qui ont été permutées, de plus d'espace dans la mémoire principale pour les processus et la mise en cache.
À peu près au même moment, 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 physique inutilisé de la mémoire - la mémoire libre montré dans l' Mem:
ligne free
.
Buffers
: relativement temporaire de stockage de matières premières des blocs sur le disque.
Cached
: en mémoire cache pour les fichiers en lecture à partir du disque. Il ne comprend pas SwapCached de la mémoire.
SwapCached
: mémoire qui a été une fois échangé, puis échangé de retour dans mais est toujours dans l'espace d'échange. Si nécessaire, son contenu peut être simplement jeté (très rapide!), sans avoir à changer (plus lent).
Donc, pour avoir une semi-estimation précise de la mémoire réellement disponible
MemFree + Buffers + Cached + SwapCached
est un bon point de départ et la free
montre dans cette deuxième ligne.
Naturellement, la gestion de la mémoire et de la statistiques et des mesures plus compliqué que cela. Les numéros indiqués en free
sont de simples estimations, au mieux, puisqu'il y a beaucoup d'autres variables à prendre en compte si vous souhaitez aller plus loin. Pour les personnes qui effectuent régulièrement l'utilisation de la mémoire de l'optimisation, c'est presque une forme d'art.
EDIT:
Un peu d'humour lien à propos de ce "problème":
http://www.linuxatemyram.com/
EDIT 2:
Pour confirmer le commentaire à propos de l'utilisation de la mémoire analyse presque être une forme d'art:
Même free
manque une grande partie des données mises en cache sur les systèmes Linux modernes. D' /proc/meminfo
sur mon système:
SReclaimable: 2253576 kB
C'est environ 2 go de mémoire utilisée par le système de la dalle de l'allocation pour la mise en cache des entrées de répertoire et il est récupérable (c'est à dire qu'il peut être effacé et utilisé par des processus si nécessaire). Pourtant, free
ne considèrent pas la mémoire cache et ne pas entrer dans l'une de ses calculs et, par conséquent, il apparaît que la mémoire utilisée.
L' slabtop
utilitaire, si disponible, permet à l'administrateur système pour savoir ce que la dalle de cache est utilisé pour.
Un moyen (pour l'utilisateur root uniquement) pour avoir free
montrer la réelle utilisation de la mémoire 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 émise si la mémoire disponible peut ne pas être suffisante pour contenir les données qui ont été échangée - dans ce cas, on doit prendre en compte l' Swap:
ligne de libres dans leur utilisation de la mémoire calculs.
La deuxième commande pousse toutes les données mises en mémoire tampon sur le disque. Il permet de plus de mémoire cache à être libéré dans l'étape suivante.
La troisième commande est la plus importante de l'ensemble - il oblige le noyau de jeter autant de mise en cache de données que possible (le cache de la page, les entrées du répertoire, des inodes, etc).
Ensuite, free
montre enfin ce que le processus en cours d'exécution en fait usage dans ses -/+ buffers/cache:
ligne de. Il est tout à fait remarquable que, même après la suppression de toutes les données mises en cache le noyau commence rapidement la mise en cache de nouveau - dans ce cas, il a déjà atteint près de 250 MO de données mises en cache dans un délai de quelques secondes.
La dernière commande permet à l'espace de swap de nouveau - il est seulement nécessaire si la première commande a été utilisé trop.
Il convient de noter que ces commandes doivent être exécutées par l'utilisateur root pour avoir les privilèges nécessaires.