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%?
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
:
L'utilitaire free
obtient également ses données directement à partir de /proc/meminfo
:
MemTotal
MemTotal
- MemFree
MemFree
Buffers
Cached
MemTotal
- MemFree
- Buffers
- Cached
MemFree
+ Buffers
+ Cached
SwapTotal
SwapTotal
- SwapFree
SwapFree
MemTotal
+ SwapTotal
MemTotal
- MemFree
+ SwapTotal
- SwapFree
MemFree
+ SwapFree
Corrigé en cache - lzap
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.
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:
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.