3 votes

Utilisation de la mémoire sous Linux

Nous avons eu quelques problèmes d'utilisation de la mémoire sous Linux sur certains de nos serveurs. free, top, ps, et vmstat montrent tous 261M libres sur 1G (~25%). Cependant, l'addition de la quantité de mémoire affichée par processus dans top montre que nous devrions utiliser très peu de mémoire. Le cache n'a qu'environ 48M et 0K dans le buffer, ce qui fait que la mémoire totale disponible est de 309M, toujours considérablement moins que ce que nous devrions avoir. J'ai inclus une capture d'écran de notre sortie top à l'adresse suivante http://www.workxpress.com/sites/default/files/top.png (triés par mémoire). C'est mon premier post sur serverfault donc je n'ai pas pu inclure l'image dans mon post :-P

Après avoir essayé plusieurs recherches sur Google, je ne suis pas plus avancé qu'avant. La majorité des résultats m'ont dit la même chose, la mémoire est utilisée pour le cache et les tampons (ce que je savais déjà). Mais top et free ne montrent clairement pas cela. Toute aide est grandement appréciée.

Merci,
JamesArmes

Mise à jour :
J'ai inclus notre /proc/meminfo d'une occurrence plus récente de ce problème :

MemTotal:      1028636 kB
MemFree:         30056 kB
Buffers:             0 kB
Cached:          28732 kB
SwapCached:     154684 kB
Active:         265328 kB
Inactive:        19416 kB
SwapTotal:     2097144 kB
SwapFree:      1758196 kB
Dirty:              36 kB
Writeback:           0 kB
AnonPages:      240260 kB
Mapped:          11996 kB
Slab:            23008 kB
SReclaimable:    11976 kB
SUnreclaim:      11032 kB
PageTables:       5636 kB
NFS_Unstable:        0 kB
Bounce:              0 kB
CommitLimit:   2611460 kB
Committed_AS:  1099080 kB
VmallocTotal: 34359738367 kB
VmallocUsed:      7204 kB
VmallocChunk: 34359731091 kB
HugePages_Total:     0
HugePages_Free:      0
HugePages_Rsvd:      0
HugePages_Surp:      0
Hugepagesize:     2048 kB

Voici notre /etc/sysctl.conf (avec toutes les lignes commentées supprimées) :

kernel.printk = 4 4 1 7                            
kernel.maps_protect = 1                                            
fs.inotify.max_user_watches = 524288
vm.mmap_min_addr = 65536
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1

J'espère que cela vous aidera.

3voto

Swoogan Points 1947

Puisque je vois vmware-guestd fonctionner, je suppose qu'il s'agit d'une VM. En supposant qu'il s'agisse d'ESX, allez dans le CIV et faites un clic droit sur la machine. Cliquez sur Edit Settings... et sélectionnez le Resources onglet. Cliquez sur Memory et veiller à ce que Unlimited est vérifié sous Limit .

Ce qui se passe probablement, c'est que vous avez une limite de mémoire, et lorsque la machine utilise beaucoup de mémoire (approche ou dépasse la limite), les outils invités de vmware conservent la mémoire "utilisée" au lieu de la restituer à ESX, au cas où elle serait à nouveau nécessaire.

UPDATE :

"Le serveur vous permet de mettre en marche une machine virtuelle uniquement si la réservation de CPU et de mémoire est disponible... Lorsque les ressources ne sont pas utilisées, l'hôte ESX Server les met à la disposition des autres machines virtuelles."

http://www.vmware.com/pdf/vi3_esx_resource_mgmt.pdf

Il le fait par le biais du pilote "ballon" (vmmemctl) qui fait partie des outils de l'invité. Disons que votre machine utilise 100MB de RAM, puis vous lancez un programme et cela fait un bond jusqu'à 500MB. Maintenant vous arrêtez ce programme et vous vous attendez à ce que la RAM redescende à 100MB. Mais ce n'est pas le cas. En effet, pour que ESXi puisse récupérer la mémoire de l'OS invité (ce qu'il fait même lorsqu'il y a une réservation), il doit utiliser le pilote de ballon. Pour que le système d'exploitation "agisse" comme s'il avait moins de mémoire, le pilote de ballon "utilise" la mémoire qu'ESXi veut, de sorte que le système d'exploitation ne puisse pas l'utiliser.

Autrement dit, même avec une réservation, l'invité n'utilise que la quantité de RAM de l'hôte qu'il utilise. Lorsqu'il en utilise plus, ESX alloue plus de RAM hôte que l'invité pense maintenant utiliser. toujours est disponible. Pour "convaincre" l'invité que la nouvelle mémoire vive n'est plus disponible, le pilote de ballon l'utilise. La réservation signifie simplement "Ne démarrez pas la VM à moins que la machine physique n'ait 1 Go de libre pour y charger l'invité" et non "Donnez à l'invité 1 Go qu'il l'utilise ou non".

1voto

tkbx Points 587

Essayez :

cat /proc/meminfo

Il donne plus de détails sur l'utilisation de la mémoire.

1voto

J.J. Points 3543

Essayez de déboguer l'utilisation de la mémoire avec le script. ps_mem.py

0voto

Max Alginin Points 3284

Vous avez peut-être une réservation de mémoire du noyau. Plus précisément, vérifiez les paramètres hugepages dans /proc/meminfo.

Et veuillez poster votre /etc/sysctl.conf si cette suggestion ne vous aide pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X