Deaktivieren Sie das Auslagern des inaktiven Speichers

Hintergrund:

OSX speichert einige Informationen im RAM, die nicht mehr verwendet werden, aber kürzlich verwendet wurden. Dies wird als inaktiver Speicher bezeichnet und soll die Benutzererfahrung verbessern, indem einige Aktionen beschleunigt werden:

Wenn Sie beispielsweise Mail verwendet und dann beendet haben, wird der von Mail verwendete Arbeitsspeicher als inaktiver Speicher markiert. Inaktiver Speicher steht für die Verwendung durch eine andere Anwendung zur Verfügung, genau wie Freier Speicher. Wenn Sie Mail jedoch öffnen, bevor sein inaktiver Speicher von einer anderen Anwendung verwendet wird, wird Mail schneller geöffnet, da sein inaktiver Speicher in aktiven Speicher konvertiert wird, anstatt es von dem langsameren Laufwerk zu laden.

Klingt fragwürdig (um wie viel können Sie Mail auf einem Quad-Core-Rechner beschleunigen?), aber das kann zumindest nicht schaden , da ein solcher Speicher wie freier Speicher behandelt werden kann! Eigentlich kann es :

Wenn in OS X die Anzahl der Seiten in der Free-Liste unter einen berechneten Schwellenwert fällt, fordert der Kernel physische Seiten für die Free-Liste zurück, indem er inaktive Seiten aus dem Speicher auslagert.

Dies lässt mich fragen, ob die Speicherverwaltung von OSX tatsächlich überlegen ist; schließlich erwähnt die gleiche Seite das

Paging jeglicher Art ... wirkt sich negativ auf die Leistung aus, da es das System dazu zwingt, viel Zeit mit dem Lesen und Schreiben auf die Festplatte zu verbringen. Das Einlesen einer Seite aus dem Sicherungsspeicher nimmt viel Zeit in Anspruch und ist viel langsamer als das direkte Einlesen aus dem RAM. Wenn das System eine Seite auf die Festplatte schreiben muss, bevor es eine weitere Seite von der Festplatte lesen kann, ist die Auswirkung auf die Leistung sogar noch schlimmer.

Ausgabe:

Dies (das Auslagern von inaktivem Speicher und die daraus resultierende schwerwiegende Leistungsminderung) tritt wahrscheinlich sogar bei trivialen Aufgaben wie dem Durchsuchen mehrerer Registerkarten auf, selbst wenn die Anzahl der gleichzeitig geöffneten Registerkarten in einem angemessenen Rahmen gehalten wird (sowohl Safari als auch Chrome scheinen daran schuld zu sein Hinzufügen zum inaktiven Speicher, wenn ein Tab geschlossen wird).

Die Maschine wird in diesem Fall kaum noch nutzbar – selbst das Öffnen des Terminals und das Löschen des Speichers kann einige Minuten dauern.

Frage:

Kann das Auslagern von inaktivem Speicher deaktiviert werden? Oder kann er vollständig deaktiviert werden, da inaktiver Speicher nicht unbedingt erforderlich ist?

Gibt es alternativ einen Daemon oder eine vorzugsweise Apple-App, die die inaktive Speichernutzung überwacht (ein OSX-Oxymoron) und wenn eine beliebige Menge (ein halber Gig?) überschritten wird, eine purgeausgeführt wird?

Wenn ich die Tags sehe, nehme ich an, dass sie das Paging des inaktiven Speichers in Mountain Lion immer noch nicht behoben haben?
@Pieter: Anscheinend gibt es nichts zu beheben, da die aktuelle Implementierung genau so ist, wie Apple es beabsichtigt hat :)
sie haben dies als „funktioniert wie beabsichtigt“ bestätigt? Ich verstehe nicht, welche Vorteile es hat, inaktiven Speicher auf die Festplatte zu verschieben.
„… anschließende schwerwiegende Leistungsminderung …“ – trotz allem, was in der Mac-Entwicklerbibliothek steht, bin ich nicht davon überzeugt, dass alle Verschlechterungen schwerwiegend negativ sind. Vermuten Sie, dass es in einigen Fällen einen negativeren Effekt gibt, wenn das Betriebssystem versucht, seine Herangehensweise an externe Auslagerungsdateien einzuschränken : Virtueller Mac-Speicher: Wie man OS X dazu bringt, Auslagerungsdateien (Seitendateien) mit einem normalen Start genauso frei zu erstellen wie mit einem Safe Booten (Swapfile1 usw.)
@Graham Perrin: Wenn ich ernst sage, spreche ich aus Erfahrung (wenn auch nicht unbedingt einer gemeinsamen) - wenn Sie mit riesigen Datenmengen arbeiten und ständig der Speicherplatz auf der Festplatte knapp wird, bevor Sie sie archivieren, wird die Auslagerungsdatei immer größer fragmentiert, zunehmende Zugriffszeit usw. (wäre bei einer SSD kein Leistungsproblem, stelle ich mir vor, klingt aber nach etwas, das ihre Lebensdauer verkürzen würde). Ich befürworte dieses Nutzungsmuster nicht, aber das ist nur etwas, auf das ich immer wieder stoße.

Antworten (3)

Ich forsche seit einiger Zeit genau dieser Frage nach und bin zu dem Schluss gekommen, dass zwar an verschiedenen Stellen mehrere sogenannte „Lösungen“ angeboten werden, aber keine davon das Problem wirklich behebt oder die Symptome verschwinden lässt. Das Beste, was ich gefunden habe, sind Techniken, die sich ändern, wenn inaktiver Speicher ausgetauscht wird, wie z. B. die Verwendung des purgeBefehls, auf den Sie sich bezogen haben. Ich glaube, dass MacLemon Recht hat, dass das Auslagern nur vollständig und nicht selektiv deaktiviert werden kann. Daher wäre das Deaktivieren des Auslagerns von inaktivem Speicher in der Praxis gleichbedeutend mit dem vollständigen Deaktivieren des virtuellen Speichers – was auf einer Maschine mit wirklich großen Mengen eine praktikable Lösung sein könnte von RAM, ist aber auf Maschinen mit einer geringen maximalen RAM-Kapazität wie MacBooks oder Minis unpraktisch.

Der Grund dafür, dass keine der Ad-hoc-Löschlösungen die Situation wesentlich besser macht, ist, dass es wirklich nur zwei Möglichkeiten gibt, OS X zu zwingen, inaktiven Speicher zu löschen: den purgeBefehl oder das Erzwingen der Zuweisung des gesamten freien Speichers (und da ich es nicht bin sicher, welche Methode purgeverwendet wird, diese beiden können tatsächlich mehr oder weniger gleich sein).purge, wie Sie bereits erwähnt haben, nimmt eine nicht triviale Zeit in Anspruch. Das Zuweisen des gesamten freien Speichers beschleunigt einfach den Prozess, durch den der Inhalt des inaktiven Speichers auf natürliche Weise ausgelagert würde, und nimmt daher immer noch die gleiche große Menge an Systemressourcen in Anspruch. Der einzige Vorteil dieser beiden Lösungen besteht darin, dass Sie auswählen können, wann der Austausch erfolgt, sodass dies erfolgen kann, bevor Sie normalerweise versuchen würden, diesen Speicher etwas anderem zuzuweisen. Ob das für Sie wirklich nützlich ist, hängt von mehreren Faktoren ab, also finden Sie es am einfachsten heraus, indem Sie es einfach ausprobieren.

Ich habe einige der verfügbaren Dienstprogramme zum Löschen des Speichers getestet und festgestellt, dass für mich das manuelle Erzwingen von inaktivem Swap eine aktivere Überwachung der Speicherebenen erfordert, als praktisch ist, während ich tatsächlich arbeite und ein Dienstprogramm verwende Dass der Austausch automatisch erzwungen wird, wenn der freie Speicher unter einen bestimmten Schwellenwert fällt, ist nicht besser, als das Betriebssystem dies selbst tun zu lassen, da ich immer noch keine Kontrolle darüber habe, wann der Austausch stattfindet und meine Apps SPOD werden. Es gibt zwar eine App, die genau das tut, wonach Ihre alternative Frage verlangt, aber das macht die Situation nicht weniger schmerzhaft.

Bis Apples OS-Entwicklungsteam entscheidet, dass das Speicherverwaltungssystem nicht so funktioniert, wie es sollte, und sie einen Weg finden, es richtig zum Laufen zu bringen, besteht die einzige wirkliche Lösung darin, zu identifizieren, welche Apps den meisten inaktiven Speicher erzeugen, und aufzuhören benutze sie. In meiner Situation bedeutete dies, den Webbrowser zu wechseln. Ich habe eine Vielzahl von ihnen getestet, und Chrome scheint bisher den wenigsten inaktiven Speicher zu generieren, wahrscheinlich teilweise, weil jeder Tab und jede Erweiterung als separater Prozess ausgeführt wird, sodass die native Speicherverwaltung des Betriebssystems jeden behandeln kann eine separat in Bezug auf die Priorisierung des Austauschs. Safari ist das Schlimmste, was ich versucht habe; Beginnend mit Safari 5.1 konnte ich ein paar Registerkarten öffnen, absolut nichts tun und beobachten, wie der inaktive Speicher im Aktivitätsmonitor schnell ansteigt – er würde leicht von < 1 GB inaktiv auf >3 GB inaktiv innerhalb von etwa fünf Minuten, führen Sie den Swap-Zyklus aus und machen Sie dann genau dasselbe. (Zugegeben, Speicher, der nichts tut, ist genau das, was ihn überhaupt erst inaktiv macht, aber er sollte nicht mehr inaktiven Speicher erzeugen, als überhaupt aktiv zugewiesen wurde.) Safari 6 unter Mountain Lion ist etwas besser, aber nicht besser genug, um einen Wechsel wert zu sein. Firefox, das nicht auf WebKit basiert, sollte diesbezüglich besser sein als Safari oder Chrome, aber es hat seine eigenen Probleme mit der Speicherverwaltung, einschließlich einer Geschichte von Speicherlecks, die es in der Praxis nicht besser machen. Es wird nicht mehr inaktiver Speicher erstellt, als ursprünglich aktiv zugewiesen wurde.) Safari 6 unter Mountain Lion ist etwas besser, aber nicht besser genug, um einen Wechsel wert zu sein. Firefox, das nicht auf WebKit basiert, sollte diesbezüglich besser sein als Safari oder Chrome, aber es hat seine eigenen Probleme mit der Speicherverwaltung, einschließlich einer Geschichte von Speicherlecks, die es in der Praxis nicht besser machen. Es wird nicht mehr inaktiver Speicher erstellt, als ursprünglich aktiv zugewiesen wurde.) Safari 6 unter Mountain Lion ist etwas besser, aber nicht besser genug, um einen Wechsel wert zu sein. Firefox, das nicht auf WebKit basiert, sollte diesbezüglich besser sein als Safari oder Chrome, aber es hat seine eigenen Probleme mit der Speicherverwaltung, einschließlich einer Geschichte von Speicherlecks, die es in der Praxis nicht besser machen.

Was das Problem wirklich beheben würde, wäre, wenn es eine Option gäbe, wahrscheinlich eine versteckte Option im Betriebssystem, die das Betriebssystem anweist, den Inhalt des inaktiven Speichers bei Bedarf einfach zu sichern, anstatt seinen Inhalt auf die Festplatte auszulagern. Aber ich erwarte nicht, dass Apple jemals eine solche Option zur Verfügung stellt.

„Was das Problem wirklich beheben würde, wäre, wenn (das Betriebssystem) bei Bedarf einfach den Inhalt des inaktiven Speichers ausgeben würde, anstatt seinen Inhalt auf die Festplatte auszulagern.“ Wie in meiner Antwort erklärt , macht das Betriebssystem genau das. Sie haben gerade diesen Teil der Dokumentation verpasst.

Wie viel RAM hat dein Mac? Außerdem ist bekannt, dass Browser (insbesondere Webkit-Browser) heutzutage sehr viel Speicher verbrauchen. Inaktiver Speicher wird sinnvoll genutzt, im Gegensatz zu freiem RAM, der nur dort sitzt und Strom verbraucht. Im Falle eines Browsers können Sie damit das Schließen eines Tabs rückgängig machen und dennoch den Verlauf beibehalten usw.

Sie können die Speicherauslagerung vollständig deaktivieren, indem Sie sie ausführen sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plistund neu starten. Sie können das Auslagern nicht selektiv deaktivieren.

Sie können dies rückgängig machen, indem Sie es sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plisterneut ausführen und neu starten.

„… Inaktive Erinnerung wird sinnvoll genutzt …“ – +1 .
@MacLemon mit 4 GB RAM und Maverick-Betriebssystem, ich finde, dieser Mac ist wirklich langsam. Ich habe ungefähr 1,5 GB inaktiven RAM. Ich versuche nur Ihren Vorschlag, aber es scheint nicht gut zu funktionieren. Irgendwelche anderen Vorschläge?
Ich habe nie gesagt, dass es gut funktionieren würde, und die erste Frage betraf die Größe des Arbeitsspeichers im Mac. Es beantwortet Ihre Frage. Die richtige Lösung für Ihre Frage ist, mehr RAM zu bekommen.
Ich habe 16 GB (und SSD) und das neueste OSX ist beim Austausch verdammt langsam. Es ist schrecklich, wie es sein Gedächtnis verwaltet.
Hinweis: Das Deaktivieren des dynamischen Pagers funktioniert nicht auf Systemen mit aktiviertem SIP ( Systemintegritätsschutz ).

Aktualisierung 2020

Diese Frage wurde 2012 gestellt und diese Antwort wurde 2020 geschrieben, und einiges hat sich in der Zwischenzeit geändert, aber vieles ist gleich geblieben.

Ich glaube, die meisten dieser Fragen, die Antwort von Quantumpanda und die Beschreibung aus dem Apple Support-Artikel leiden unter einem Missverständnis der Natur des "inaktiven Speichers". Das OP verweist auf die Apple-Dokumentation, die besagt

Wenn in OS X die Anzahl der Seiten in der Free-Liste unter einen berechneten Schwellenwert fällt, fordert der Kernel physische Seiten für die Free-Liste zurück, indem er inaktive Seiten aus dem Speicher auslagert.

Die Apple-Dokumentation sagte das im Jahr 2012 und sagt das immer noch im Jahr 2020. Dieses Zitat stammt jedoch aus dem Abschnitt „Paging Out Process“ der Dokumentation; Das OP hat die Diskussion über " Seitenlisten im Kernel " verpasst. Der Schlüsselsatz (für unsere aktuellen Zwecke) in diesem Abschnitt ist

Wenn eine inaktive Seite nicht modifiziert wurde und nicht permanent resident (verdrahtet) ist, wird sie gestohlen (alle aktuellen virtuellen Zuordnungen zu ihr werden zerstört) und der freien Liste hinzugefügt.

Worüber der Support-Artikel sprach

Wenn Sie beispielsweise Mail verwendet und dann beendet haben, wird der von Mail verwendete Arbeitsspeicher als inaktiver Speicher markiert. Inaktiver Speicher steht für die Verwendung durch eine andere Anwendung zur Verfügung, genau wie Freier Speicher. Wenn Sie Mail jedoch öffnen, bevor sein inaktiver Speicher von einer anderen Anwendung verwendet wird, wird Mail schneller geöffnet, da sein inaktiver Speicher in aktiven Speicher konvertiert wird, anstatt es von dem langsameren Laufwerk zu laden.

Um ein Programm auszuführen, in diesem Beispiel Mail, wird der Code für dieses Programm von der Festplatte gelesen und in den RAM geschrieben, da die CPU nur Code aus dem RAM ausführen kann. Das Betriebssystem verfolgt die Tatsache, dass das RAM eine Kopie einer Datei auf der Festplatte ist, und es verfolgt, ob diese Daten im RAM geändert wurden oder nicht. Wenn das Mail-Programm beendet wird, wird die RAM-Kopie der Datei nicht mehr benötigt und landet in der Liste "inaktiv". Wenn jedoch genügend RAM vorhanden ist, müssen die Daten im RAM nicht zerstört werden, sodass sie einfach unverändert bleiben.

Wenn Sie das Programm jetzt sofort erneut ausführen, muss das Betriebssystem den Code nicht von der Festplatte in den Arbeitsspeicher kopieren, da es anhand der Liste der inaktiven Elemente erkennen kann, dass es bereits eine Kopie der Datei im Arbeitsspeicher hat verschiebt diesen RAM in die aktive Liste und weist ihn dem neuen laufenden Mail-Programm zu. Dies ist viel schneller als das erneute Lesen der Datei von der Festplatte.

Mail ist jedoch ein schlechtes Beispiel, da Sie das Mailprogramm nicht oft stoppen und starten. Es gibt jedoch Dutzende kleiner Programme, die das Betriebssystem im Hintergrund ausführt, z. B. um Spotlight-Indizes auf dem neuesten Stand zu halten oder Ihre lokalen Daten mit iCloud zu synchronisieren, die häufig ausgeführt und dann beendet werden, wenn sie fertig sind. Bei diesen Programmen ist die Zeitersparnis viel bedeutender.

Der kritische Punkt: Diese Art von inaktivem Speicher wird niemals ausgelagert

Diese Art von Speicher, der durch eine Datei auf der Festplatte gesichert und nicht modifiziert wird, wird niemals in swap geschrieben , da bereits eine Kopie davon auf der Festplatte an anderer Stelle vorhanden ist. Dies ist die Art von Speicher, die im oben hinzugefügten Zitat genannt wird: "wurde nicht geändert und ist nicht dauerhaft resident". Wenn nicht genügend Speicher vorhanden ist, wird diese Art von inaktivem Speicher nicht ausgetauscht, sondern gestohlen und direkt auf die freie Liste gesetzt.

Inaktiver Speicher, der ausgelagert wird, ist Speicher, den eine laufende Anwendung noch benötigt

Die andere Art, wie der Speicher inaktiv wird, ist, wenn eine Anwendung ihn eine Zeit lang nicht berührt (gelesen oder geschrieben) hat. Wenn Sie beispielsweise in einem Textverarbeitungsprogramm arbeiten und mehrere Dateien geöffnet haben, können dies Informationen zu einer der Dateien sein, die Sie geöffnet haben, an denen Sie jedoch nicht arbeiten. Wenn der Speicher zur Neige geht, wird diese Art von Speicher auf die Festplatte ausgelagert, um Platz für alles zu schaffen, was Speicher anfordert, der gerade benötigt wird und der dazu führt, dass der Speicher zur Neige geht.

Diese Art von inaktivem Speicher muss ausgelagert werden, da er Daten enthält, die sonst nirgendwo gespeichert sind. Die einzige Möglichkeit, das Auslagern dieser Art von Speicher zu verhindern, besteht darin, Swap vollständig zu deaktivieren, und das ist fast immer eine schlechte Wahl. Wenn Sie Swap vollständig deaktivieren, reduzieren Sie die Kapazität des Systems erheblich. Wenn Sie das System darauf beschränken würden, nur das auszuführen, was es mit deaktiviertem Swap ausführen könnte, würde es mit aktiviertem Swap genauso gut funktionieren.

purgeist ein roter Hering

Das purgeProgramm ist ein kontraproduktiver Ablenkungsmanöver. Es wird den inaktiven Speicher, der gestohlen und nicht ausgetauscht werden würde, dazu zwingen, sofort gestohlen zu werden. Das mag für die Zahlen gut aussehen, aber es schadet der Leistung auf zwei Arten:

  1. Es braucht Zeit, um das purgeProgramm auszuführen
  2. Es entfernt die Leistung, die gewonnen wird, indem es den Inhalt des inaktiven Speichers verfolgt und wiederverwendet werden kann.

Fazit: Versuchen Sie nicht, das Auslagern des inaktiven Speichers zu deaktivieren