La pression mémoire n'est pas une simple mesure du pourcentage de mémoire libre et semble être un graphique de 0 à 100%. Le site sysctl
valeur de vm.memory_pressure
est calculé par rapport à une cible calculée qui suit le rapport entre les pages de mémoire libres et inactives et les pages câblées et actives. Les compteurs absolus sont visualisés à l'aide de la fonction vm_stat
outil de ligne de commande pour inspecter l'allocation détaillée de la mémoire virtuelle. Jonathan Levin propose une excellente documentation à l'adresse http://newosxbook.com/articles/MemoryPressure.html couvrant la mémoire virtuelle de MacOS et d'iOS et la façon dont ils calculent la pression de la mémoire ainsi que les actions prises lorsque l'indice de pression est élevé.
La mémoire virtuelle (vm) concernée qui alimente le calcul de la vm.memory_pressure
sont :
-
vm.page_free_count
- un décompte absolu des pages libres
-
vm.vm_page_free_target
- une cible ou un objectif calculé pour une situation "sans pression".
-
vm.page_free_wanted
- ce que le système vm aimerait libérer pour alléger l'indice de pression calculé actuel
Ainsi, si vous suivez votre pression mémoire avec le moniteur d'activité (ou si vous vérifiez les valeurs sysctl de manière programmatique ou en ligne de commande), vous feriez bien de regarder ces quatre valeurs :
sysctl -a vm | egrep "page_free|pressure"
Il existe une nouvelle commande memory_pressure
introduit avec Mavericks et lorsque je l'exécute pour conduire le sous-système de mémoire dans un état d'alerte - vous pouvez voir la pression de la mémoire augmenter dans une gamme jaune.
L'outil a alloué environ 4 Go de mémoire à l'outil alors que le graphique de la pression augmentait régulièrement jusqu'à cet état où apparemment le niveau "d'avertissement" est représenté graphiquement : sudo memory_pressure -l warn
. Comme vous pouvez le voir, le système avant la pression avait 5,9 Go utilisés et après était monté à 7,99 Go utilisés, ce qui n'a même pas besoin d'être additionné en raison du swapping et de la compression.
Après avoir vu comment vm_stat 15
a montré que l'avertissement n'entraînait aucune pagination mesurable, j'ai quitté l'outil (Control-C) puis j'ai relancé l'outil pour rendre la pression mémoire critique : sudo memory_pressure -l critical
Je ne l'ai pas laissé tourner plus de quelques minutes car la pagination commençait et une fois que l'outil a indiqué que j'avais 5 Go de RAM paginée sur le disque, je n'ai pas voulu remplir mon disque et j'ai quitté l'outil.
Vous pouvez observer la rapidité avec laquelle le système a libéré la RAM après la fin de l'avertissement et aussi comment il est passé en territoire "rouge" pour montrer que le système de mémoire virtuelle ne pouvait pas compresser suffisamment de pages pour éviter le swapping sur le disque. Je pense que le rouge sur la pression indique un swapping et une sur-allocation dramatique et/ou un moment où les pages libres sont inférieures à la quantité que le système préfère et où il purge activement les pages inactives et/ou swape les pages qui devraient être utilisées pour le swap. De même, le système se rétablit rapidement dès que les allocations sont libérées et que la pression est relâchée sur le système de mémoire virtuelle.