Der Speicherdruck ist kein einfaches Maß für den Prozentsatz des freien Speichers und scheint ein Diagramm von 0 bis 100% zu sein. Der sysctl
Wert von vm.memory_pressure
wird in Bezug auf ein berechnetes Ziel berechnet, das das Verhältnis zwischen freien und inaktiven Speicherseiten zu den verdrahteten und aktiven Seiten verfolgt. Die absoluten Zähler werden mit dem vm_stat
Befehlszeilentool angezeigt , um die detaillierte Zuordnung des virtuellen Speichers zu überprüfen. Jonathan Levin hat eine ausgezeichnete Dokumentation unter http://newosxbook.com/articles/MemoryPressure.html, die sowohl den virtuellen Speicher von macOS als auch von iOS und die Berechnung des Speicherdrucks sowie die bei hohem Druckindex ergriffenen Maßnahmen abdeckt.
Der relevante virtuelle Speicher (VM), aus dem die Berechnung vm.memory_pressure
erfolgt, ist:
vm.page_free_count
- eine absolute Anzahl von freien Seiten
vm.vm_page_free_target
- ein berechnetes Ziel für eine "druckfreie" Situation
vm.page_free_wanted
- was das vm-system zur linderung des aktuell berechneten druckindexes freigeben möchte
Wenn Sie also Ihren Speicherdruck mit dem Aktivitätsmonitor verfolgen (oder die sysctl-Werte programmgesteuert oder in der Befehlszeilen-Shell überprüfen), sollten Sie sich diese vier Werte ansehen:
sysctl -a vm | egrep "page_free|pressure"
Es gibt einen neuen Befehl memory_pressure
, der mit Mavericks eingeführt wurde. Wenn ich ihn ausführe, um das Speichersubsystem in einen Warnzustand zu versetzen, wird der Speicherdruck in einem gelben Bereich angezeigt.
Das Werkzeug über 4 GB Speicher an das Werkzeug zugeordnet , wie die Druckkurve stetig zu diesem Zustand erhöht , wo offenbar die „Warnung“ -Niveau grafisch dargestellt: sudo memory_pressure -l warn
. Wie Sie sehen, war das System vor dem Druck mit 5,9 GB belegt und nach dem Druck mit bis zu 7,99 GB belegt, was sich aufgrund von Swapping und Komprimierung nicht einmal summieren muss.
Nachdem ich beobachtet hatte, wie vm_stat 15
das Warnungsergebnis in keinem messbaren Seitenwechsel angezeigt wurde, beendete ich das Tool (Control-C) und führte das Tool erneut aus, um den Speicherdruck kritisch zu machen:sudo memory_pressure -l critical
Ich ließ dies nicht länger als ein paar Minuten laufen, als das Paging gestartet wurde und als das Tool sagte, ich hätte 5 GB RAM auf die Festplatte ausgelagert, wollte ich mein Laufwerk nicht füllen und das Tool nicht beenden.
Sie können beobachten, wie schnell das System RAM nach dem Ende der Warnung freigegeben hat und wie es in "rotes" Gebiet gerutscht ist, um anzuzeigen, dass das virtuelle Speichersystem nicht genügend Seiten komprimieren konnte, um ein Auslagern auf die Festplatte zu vermeiden. Meine Vermutung, dass der Druck rot ist, deutet auf Auslagerungen und eine dramatische Überbelegung hin und / oder auf eine Zeit, in der die freien Seiten unter dem vom System bevorzugten Wert liegen und inaktive Seiten und / oder Auslagerungsseiten, die voraussichtlich zum Auslagern verwendet werden, aktiv gelöscht werden. In ähnlicher Weise stellt sich das System schnell wieder her, sobald die Zuordnungen freigegeben sind und das virtuelle Speichersystem entlastet wird.