44 votes

Vous voulez savoir si suffisamment de mémoire est disponible sur une machine Linux pour déployer une nouvelle application

J'ai une machine linux dont instantané de la mémoire quand je fais /proc/meminfo est :

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

C'est un 16 GO machine, et j'ai une application Java pour déployer sur ce qui aura 3 jvm instances et combiné typique de la mémoire de l'obligation, pour les sera proche de 1 GO.

Je voulais savoir est-il sécuritaire de déploiement de cette application sans affecter les autres applications en cours d'exécution sur la machine. En regardant au-dessus instantané de la mémoire pouvons-nous trouver?

Quelles sont les autres statistiques de m'aidera à décider qui et comment collecter ces statistiques?

134voto

thkala Points 36148

(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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X