La pression de la mémoire n'est pas une simple jauge de pourcentage de mémoire libre et semble être un graphique de 0 à 100%. La sysctl
valeur de vm.memory_pressure
est calculée par rapport à une cible calculée qui enregistre le rapport entre les pages de mémoire libres et inactives aux pages câblée et active. Les compteurs absolus sont visualisés à l'aide de l' vm_stat
outil de ligne de commande pour vérifier l'allocation détaillée de la mémoire virtuelle. Jonathan Levin dispose d’une excellente documentation sur http://newosxbook.com/articles/MemoryPressure.html, qui traite à la fois de la mémoire virtuelle macOS et iOS et explique comment ils calculent la pression de la mémoire ainsi que les actions prises lorsque l’indice de pression est élevé.
La mémoire virtuelle pertinente (vm) qui alimente le calcul vm.memory_pressure
est:
vm.page_free_count
- un nombre absolu de 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 voudrait libérer pour atténuer l'indice de pression calculé actuel
Donc, si vous suivez votre pression de mémoire avec Activity Monitor (ou si vous vérifiez les valeurs sysctl par programmation ou à partir du shell de ligne de commande), vous feriez bien de regarder ces quatre valeurs:
sysctl -a vm | egrep "page_free|pressure"
Une nouvelle commande a été memory_pressure
introduite avec Mavericks et lorsque je l’exécute pour conduire le sous-système de mémoire à un état d’avertissement - vous pouvez voir la pression de la mémoire augmenter dans une plage jaune.
L'outil alloué environ 4 Go de mémoire à l'outil comme le graphique de la pression a augmenté de façon constante à cet état où apparemment le niveau « d'alerte » est représentée graphiquement: sudo memory_pressure -l warn
. Comme vous pouvez le constater, le système utilisé avant la pression utilisait 5,9 Go et 7,99 Go après, sans avoir à s’ajouter en raison de la permutation et de la compression.
Après avoir observé comment vm_stat 15
le résultat de l'avertissement était affiché sans aucune pagination mesurable, j'ai quitté l'outil (Control-C), puis j'ai à nouveau exécuté l'outil pour rendre la pression de la mémoire critique:sudo memory_pressure -l critical
Je ne l'ai pas laissé fonctionner plus de quelques minutes au début de la pagination et une fois que l'outil m'a indiqué que j'avais 5 Go de mémoire RAM paginée sur disque, je ne voulais pas remplir mon disque et quitter l'outil.
Vous pouvez observer la rapidité avec laquelle le système a libéré de la mémoire RAM après la fin de l'avertissement, ainsi que son passage en territoire "rouge" pour indiquer que le système de mémoire virtuelle ne pouvait pas compresser suffisamment de pages pour éviter la permutation sur disque. Ma supposition éclairée est que le rouge sur la pression indique un échange et une sur-allocation considérable et / ou un temps où le nombre de pages libres est inférieur au montant souhaité par le système et où il purge activement les pages inactives et / ou les pages d'échange qui devraient être utilisées pour l'échange. De même, le système récupère rapidement une fois les allocations libérées et la pression supprimée du système de mémoire virtuelle.