An welchem ​​Maßstab oder Maß hält sich der „Erinnerungsdruck“ von Mavericks und Yosemite?

Der Aktivitätsmonitor von Mavericks (und auch von Yosemite) zeigt ein neues Diagramm, den Speicherdruck . Leider erklärt der Hilfetext nur vage, was genau gemessen wird. Wie wird der Gedächtnisdruck berechnet?

Mavericks Activity Monitor - Speicher

Bildnachweise gehen auf diese Antwort aus einer Umfragefrage zum besten neuen Feature von Mavericks zurück.

Antworten (3)

Der Speicherdruck ist kein einfaches Maß für den Prozentsatz des freien Speichers und scheint ein Diagramm von 0 bis 100 % zu sein. Der sysctlWert von vm.memory_pressurewird in Bezug auf ein berechnetes Ziel berechnet, das das Verhältnis zwischen freien und inaktiven Speicherseiten zu den verdrahteten und aktiven Seiten verfolgt. vm_statDie absoluten Zähler werden mit dem 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 abdeckt und wie sie den Speicherdruck berechnen, sowie die Maßnahmen, die ergriffen werden, wenn der Druckindex hoch ist.

Die relevanten virtuellen Speicher (VM), die die Berechnung von speisen, vm.memory_pressuresind:

  • vm.page_free_count- eine absolute Anzahl freier Seiten
  • vm.vm_page_free_target- ein berechnetes Ziel oder Ziel für eine "druckfreie" Situation
  • vm.page_free_wanted- was das vm-System freigeben möchte, um den aktuell berechneten Druckindex zu mildern

Wenn Sie also Ihren Speicherdruck mit dem Aktivitätsmonitor verfolgen (oder meine Überprüfung der sysctl-Werte programmgesteuert oder in der Befehlszeilen-Shell), tun Sie gut daran, sich diese vier Werte anzusehen:

sysctl -a vm | egrep "page_free|pressure"

Mit Mavericks wurde ein neuer Befehl memory_pressureeingeführt, und wenn ich ihn ausführe, um das Speichersubsystem in einen Warnzustand zu versetzen, können Sie sehen, wie der Speicherdruck in einen gelben Bereich ansteigt.

Aktivitätsüberwachungsergebnisse von <code>sudo memory_pressure -l warn</code>

Das Tool wies dem Tool etwa 4 GB Speicher zu, als das Druckdiagramm stetig auf diesen Zustand zunahm, in dem anscheinend das "Warn" -Niveau angezeigt wird: sudo memory_pressure -l warn. Wie Sie sehen können, hatte das System vor dem Druck 5,9 GB und danach bis zu 7,99 GB verwendet, was sich aufgrund von Auslagerung und Komprimierung nicht einmal addieren muss.

Nachdem ich beobachtet hatte, wie vm_stat 15das Warnergebnis kein messbares Paging zeigte, 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 habe dies nicht länger als ein paar Minuten laufen lassen, als das Paging begann, 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 beenden.

Aktivitätsüberwachungsergebnisse von <code>sudo memory_pressure -l critical</code>

Sie können beobachten, wie schnell das System RAM freigab, nachdem die Warnung beendet wurde, und auch, wie es in den „roten“ Bereich überging, um zu zeigen, dass das virtuelle Speichersystem nicht genügend Seiten komprimieren konnte, um ein Auslagern auf die Festplatte zu vermeiden. Meine begründete Vermutung ist rot, dass der Druck auf Austausch und dramatische Überzuweisung und/oder eine Zeit hindeutet, in der die freien Seiten unter der vom System bevorzugten Menge liegen und inaktive Seiten aktiv gelöscht und/oder Seiten ausgetauscht werden, von denen erwartet wird, dass sie zum Austausch verwendet werden. In ähnlicher Weise erholt sich das System schnell, sobald die Zuweisungen freigegeben sind und das virtuelle Speichersystem entlastet ist.

Danke für die Abklärung. Ich würde gerne wissen, ob es einen Befehl (oder eine Reihe von Befehlen) gibt, die die Parameter für virtuellen Speicher, Dateicache und App-Speicher im obigen Screenshot berechnen.
@MuhammadHassan Die folgende Antwort enthält eine schöne Reverse-Engineering-Zusammenfassung des Algorithmus und zeigt auf, wo Sie in xnuOpen Source nach den Interna suchen müssen. Ich habe die 4 abgedeckten Werte herausgezogen, die für die GUI-Anzeige des Drucks am relevantesten sind.
Das Speicherdruckdiagramm ist meiner Meinung nach bei weitem die einfachste und aussagekräftigste Informationsquelle über den Speicherstatus. Meine Vermutung ist, dass die Formel hinter dem Diagramm ziemlich komplex und ressourcenintensiv zu berechnen ist, aber vielleicht ist es möglich, eine vereinfachte Version zu finden, die in den meisten Fällen „gut genug“ wäre, zB um ständig im Hintergrund zu laufen, um sie zu überwachen ein macos server laden.

Um diese Vermutung etwas zu verdeutlichen und genauer zu machen: Speicherdruck ist eine Metrik, die vom Kernel (xnu) mit einem dedizierten Thread namens memory_status (früher bekannt als Jetsam) verwendet wird. Dieser Thread ist dafür verantwortlich, zu erkennen, wann der verfügbare Arbeitsspeicher niedrig ist – was in OS X das Austauschen erzwingen kann und in iOS die App mit dem höchsten Speicherverbrauch beendet (da es keinen Austausch gibt). In Mavericks liegen die beiden Betriebssysteme näher beieinander. Memorystatus gibt einen Kernelhinweis aus, den die Obj-C-Laufzeit schließlich in eine appDidReceiveLowMemoryWarning übersetzt. Apps sollen ungenutzten oder fremden Speicher (z. B. Caches) löschen. Darwins libC löscht den Speicher auch automatisch.

Es gibt einen speziellen (wenn auch nicht dokumentierten) Systemaufruf, vm_pressure_monitor (#296, wenn ich mich richtig erinnere), der es einem Client ermöglicht, Druckereignisse abzuhören und zu sehen, wie viele physische Seiten zurückgefordert werden können.

Sie können Druckereignisse auf Mavericks mit Process Explorer für OS X anzeigen – herunterladbar von http://newosxbook.com/index.php?page=downloads . Das zeigt Ihnen sowohl das Manometer als auch Druckereignisse an.

Diese Website hat auch einen ausführlichen Artikel – newosxbook.com/articles/MemoryPressure.html – der den Speicherdruck und die Handhabung in OS X und iOS beschreibt
Tolle Details zu den Ähnlichkeiten und Unterschieden zwischen Mavericks und dem iOS-Kernel. Danke für den Link zum Process Explorer.

Der Speicherdruck wird durch zwei Zähler definiert, die Mach intern führt:

  • vm_page_free_count: Wie viele RAM-Seiten sind derzeit frei
  • vm_page_free_target: Wie viele RAM-Seiten sollten mindestens optimalerweise frei sein.

Sie können diese leicht mit sysctl anzeigen:

morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243

wenn die Menge an freien Seiten unter die Zielmenge fällt, haben wir eine Drucksituation.


Von http://newosxbook.com/articles/MemoryPressure.html