web-dev-qa-db-fra.com

Comment paysage calcule-t-il l'utilisation de la mémoire?

J'essaie de déboguer une situation de MOO sur un serveur Ubuntu 12.04 et, en regardant les graphiques de mémoire dans Landscape, j'ai constaté qu'il n'y avait pas eu de véritable pic d'utilisation de la mémoire. Ensuite, j'ai regardé la sortie de la commande free et je ne savais pas trop comment les deux résultats d'utilisation de la mémoire étaient liés.

Voici la sortie de paysage sur le serveur:

$ landscape-sysinfo 
  System load:  0.0               Processes:           93
  Usage of /:   5.6% of 19.48GB   Users logged in:     1
  Memory usage: 26%               IP address for eth0: -
  Swap usage:   2%

Puis j'ai lancé la commande free et j'ai eu:

$ free -m
             total       used       free     shared    buffers     cached
Mem:           486        381        105          0          4        165
-/+ buffers/cache:        212        274
Swap:          255          7        248

Je peux comprendre l'utilisation du swap à 2%, mais d'où vient l'utilisation de la mémoire à 26%?

6
David Planella

Dans le paysage

landscape-sysinfo obtient ses données directement de /proc/meminfo:

dpb@helo:~$ cat /proc/meminfo |egrep 'MemTotal:|Active:'
MemTotal:       12286760 kB
Active:          3794832 kB
dpb@helo:~$

Le calcul de "Utilisation de la mémoire" dans ce cas serait:

((MemTotal - Active) / MemTotal) * 100

Vous pouvez voir ces calculs dans:

/usr/share/pyshared/landscape/sysinfo/memory.py
/usr/share/pyshared/landscape/lib/sysstats.py

obtient ses données directement de /proc/meminfo:

En libre

L'utilitaire free obtient également ses données directement à partir de /proc/meminfo:

Mem

  • total: MemTotal
  • utilisé: MemTotal - MemFree
  • gratuit: MemFree
  • tampons: Buffers
  • mis en cache: Cached

Tampons/cache

  • utilisé: MemTotal - MemFree - Buffers - Cached
  • free: MemFree + Buffers + Cached

Échanger

  • total: SwapTotal
  • utilisé: SwapTotal - SwapFree
  • gratuit: SwapFree

Total

  • total: MemTotal + SwapTotal
  • utilisé: MemTotal - MemFree + SwapTotal - SwapFree
  • free: MemFree + SwapFree

Corrigé en cache - lzap

9
dpb

Ces graphiques ne reflètent pas tous les événements d'allocation/libération de mémoire, mais des échantillons provenant de /proc/meminfo (exactement comme dpb décrit) à des intervalles donnés. Une explication légèrement spéculative de la raison pour laquelle il n'apparaît pas dans le graphique serait que cela se produisait simplement entre deux points lorsque la mémoire utilisée était échantillonnée.

Je suppose que ce qui est arrivé ici est qu’un processus a acquis rapidement beaucoup de mémoire et que le tueur OOM l’a éliminé avant qu’un échantillon puisse être fabriqué. Ce serait une circonstance assez extrême et une autre qui signifierait que la machine entière tournait lentement alors qu’elle échangeait lourdement. Ce chargement sur la machine réduirait la probabilité que le système dispose de suffisamment de temps pour échantillonner l'utilisation de la mémoire au cours de cette fenêtre et la signaler au serveur Landscape.

3
tealeg

Pour ajouter à la réponse correcte de dpb, nous devons définir la différence entre les types de mémoire. En allant par documentation de redhat sur/proc/meminfo :

Les principales définitions à utiliser:

  • Active La mémoire est utilisée récemment et ne doit pas être remplacée par le système d'exploitation lorsque de nouvelles pages sont importées.
  • MemTotal représente la quantité de mémoire utilisable de votre système (mémoire physique moins une petite quantité de mémoire utilisée pour le code du noyau).
  • MemFree est la mémoire actuellement inutilisée. La mémoire utilisée en tant que cache disque n'est pas libre.
  • MemUsed la mémoire est utilisée = MemTotal - MemFree.
  • Cached est la mémoire utilisée comme cache pour les fichiers sur le disque - si vous lisez récemment un fichier à partir du disque, vous pourrez le consulter à nouveau dans un proche avenir. gardons-le donc en mémoire quand il est disponible (il est essentiellement gratuit et pourrait considérablement accélérer votre ordinateur, car les lectures à partir du disque durent plusieurs millisecondes, tandis que les lectures à partir de la mémoire durent quelques microsecondes ou moins).
  • Tampons est un tampon pour les périphériques IO situés - par exemple, lorsque vous modifiez les valeurs d'un fichier, celui-ci est d'abord enregistré dans les mémoires tampons (dans votre mémoire principale), puis les modifications sont écrites sur le disque car l'écriture sur le disque est lente. Cette mémoire tampon est de courte durée et infime sur les noyaux modernes. (Bien entendu, la distinction entre les caches/tampons est moins claire sur les noyaux linux modernes, voir [1] ).
  • MemUsed - Buffers/Cached (premier nombre de la deuxième ligne de la valeur de free) représente la quantité de mémoire utilisée par vos processus. Il s’agit de la quantité de mémoire utilisée en ignorant le cache de disque (que votre système est libre de réécrire).

Vous pourriez facilement avoir plus de mémoire active que MemUsed - Buffers/Cached. Ce scénario se produit lorsque vous accédez fréquemment à des parties du disque mises en cache en mémoire. De même, vous pouvez avoir des processus qui ont alloué de la mémoire mais n'ont pas utilisé cette mémoire récemment. Peut-être l'idéal serait-il de déplacer cette mémoire allouée pour la permuter si vous avez besoin de plus de mémoire.

0
dr jimbob