La presión de la memoria no es un simple indicador del porcentaje de memoria libre y parece ser un gráfico de 0 a 100%. El sysctl
valor de vm.memory_pressure
se calcula en relación con un objetivo calculado que rastrea la relación entre las páginas de memoria libres e inactivas y las páginas cableadas y activas. Los contadores absolutos se ven utilizando la vm_stat
herramienta de línea de comandos para inspeccionar la asignación detallada de la memoria virtual. Jonathan Levin tiene una excelente documentación en http://newosxbook.com/articles/MemoryPressure.html que cubre tanto la memoria virtual de macOS como de iOS y cómo calculan la presión de la memoria, así como las acciones que se toman cuando el índice de presión es alto.
La memoria virtual relevante (vm) que alimenta el cálculo de vm.memory_pressure
son:
vm.page_free_count
- un recuento absoluto de páginas gratuitas
vm.vm_page_free_target
- un objetivo u objetivo calculado para una situación "libre de presión"
vm.page_free_wanted
- qué le gustaría liberar al sistema vm para aliviar el índice de presión calculado actual
Entonces, si está rastreando la presión de su memoria con el Monitor de actividad (o si estoy verificando los valores de sysctl mediante programación o en el shell de la línea de comando), haría bien en observar estos cuatro valores:
sysctl -a vm | egrep "page_free|pressure"
Se memory_pressure
introdujo un nuevo comando con Mavericks y cuando lo ejecuto para llevar el subsistema de memoria a un estado de advertencia, puede ver que la presión de la memoria aumenta a un rango amarillo.
La herramienta asignado alrededor de 4 GB de memoria a la herramienta como el gráfico de presión aumentó constantemente a este estado donde aparentemente se representa gráficamente el nivel de "alerta": sudo memory_pressure -l warn
. Como puede ver, el sistema antes de que la presión usara 5.9 GB y después usaba hasta 7.99 GB, lo que ni siquiera necesita sumarse debido al intercambio y la compresión.
Después de ver cómo se vm_stat 15
mostró el resultado de la advertencia en una paginación no medible, salí de la herramienta (Control-C) y luego volví a ejecutar la herramienta para hacer que la presión de la memoria sea crítica:sudo memory_pressure -l critical
No dejé que esto se ejecutara durante más de unos minutos mientras se iniciaba la paginación y una vez que la herramienta dijo que tenía 5 GB de RAM paginada en el disco, no quería llenar mi unidad y cerrar la herramienta.
Puede observar qué tan rápido el sistema liberó RAM después de que finalizó la advertencia y también cómo se estrelló en territorio "rojo" para mostrar que el sistema de memoria virtual no podía comprimir suficientes páginas para evitar el intercambio en el disco. Mi suposición educada es roja sobre la presión indica el intercambio y la sobreasignación dramática y / o un momento en que las páginas libres están por debajo de la cantidad que el sistema prefiere y está purgando activamente las páginas inactivas y / o intercambiando las páginas que se espera que se usen para intercambiar. Del mismo modo, el sistema se recupera rápidamente una vez que se liberan las asignaciones y se elimina la presión del sistema de memoria virtual.