Wie kann ich die Verwendung von Swap durch Mac OS X verhindern, wenn noch „inaktiver“ Speicher vorhanden ist?

Wie kann ich die Verwendung von Swap durch Mac OS X verhindern, wenn noch „inaktiver“ Speicher vorhanden ist?

Ein häufiges Phänomen bei meiner täglichen Nutzung von OS X (und laut diversen Beiträgen im Internet auch bei vielen anderen) ist, dass das System langsam zu werden scheint, wenn kein „freier“ Speicher mehr verfügbar ist. Angeblich liegt das am Swapping, da eine starke Festplattenaktivität erkennbar ist und vm_stat viele Pageouts meldet. (Korrigieren Sie mich, wenn ich falsch liege)

Allerdings beträgt die Menge des „inaktiven“ RAM normalerweise etwa 12,5–25 % des gesamten verfügbaren Speichers (^1), wenn das Swapping beginnt/auftritt/endet.

Entsprechendhttp://support.apple.com/kb/ht1342:

Inaktiver Speicher

Diese Informationen im Speicher werden nicht aktiv verwendet, wurden aber vor Kurzem verwendet.

Wenn Sie beispielsweise Mail verwendet und dann beendet haben, wird der von Mail verwendete RAM als inaktiver Speicher gekennzeichnet. Dieser inaktive Speicher steht einer anderen Anwendung zur Verfügung, genau wie der freie Speicher. Wenn Sie Mail jedoch öffnen, bevor der inaktive Speicher von einer anderen Anwendung verwendet wird, wird Mail schneller geöffnet, da der inaktive Speicher in aktiven Speicher umgewandelt wird, anstatt Mail von der langsameren Festplatte zu laden.

Und lauthttp://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html:

Die inaktive Liste enthält Seiten, die sich derzeit im physischen Speicher befinden, auf die aber in letzter Zeit nicht zugegriffen wurde. Diese Seiten enthalten gültige Daten, aberkann jederzeit aus dem Speicher gelöscht werden.

Im Grunde gilt also: Wenn ein Programm beendet wird, wird sein Speicher als inaktiv markiert und sollte jederzeit wieder beansprucht werden können. Dennoch wird OS X es vorziehen, Speicher in die Auslagerungsdatei auszulagern, anstatt ihn einfach zu beanspruchen, wenn der „freie“ Speicher zu niedrig wird.

Warum? Was ist der Vorteil dieses Verhaltens gegenüber, sagen wir, dem sofortigen Freigeben des inaktiven Speichers und dem Nichtberühren der Auslagerungsdatei? Einige Quellen (^2.) geben an, dass OS X den „inaktiven“ Speicher vor der Freigabe in den Swap-Speicher auslagern würde, aber das ergibt jetzt keinen Sinn, oder, wenn der Speicherkann jederzeit aus dem Speicher gelöscht werden? Tauschen ist teuer, Freigeben ist billig, oder?

Kann dieses Verhalten mithilfe einer Voreinstellung oder eines bekannten Hacks geändert werden? (Vorzugsweise mit einem Hack, der nicht das vollständige Deaktivieren von Swap/Dynamic_Pager und einen Neustart beinhaltet...)

Ich schätze diesäubernBefehl sowie das Konzept der Reparatur von Festplattenberechtigungen, um freien Speicher zu erzwingen. Dies sind jedoch Möglichkeiten, mühsam mehr freien Speicher zu erzwingen, als die Swap-/Release-Entscheidungslogik tatsächlich zu reparieren ...

Übrigens wurde hier eine ähnliche Frage gestellt:http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/und hier:http://hintsforums.macworld.com/showthread.php?t=87688aber obwohl die OP die Kernfrage erneut gestellt haben, geht keine der Antworten darauf ein ...

^1.UPDATE 17. März 2012Seit ich diese Frage zum ersten Mal gestellt habe, ist mein installierter RAM von 4 GB auf 8 GB heruntergegangen, und das Problem besteht weiterhin. Die Menge an „inaktivem“ RAM betrug vorher 0,5–1,0 GB und liegt jetzt beim Vertauschen von Starts/Auftreten/Enden normalerweise bei etwa 1,0–2,0 GB, d. h. es scheint, dass etwa 12,5–25 % des RAM durch die OSX-Kernellogik als inaktiv erhalten bleiben.

^2. Zum Beispielhttps://apple.stackexchange.com/questions/4288/was-bedeutet-es-wenn-ich-am-ende-eines-arbeitstages-viel-inaktives-gedächtnis-habe:

Sobald der gesamte Speicher verwendet wird (der freie Speicher ist 0), schreibt das Betriebssystem den inaktiven Speicher in die Auslagerungsdatei, um mehr Platz im aktiven Speicher zu schaffen.

UPDATE 17. März 2012

Hier ist eine Zusammenfassung der Methoden, die bisher als hilfreich vorgeschlagen wurden:

DersäubernBefehl

„Wird verwendet, um die anfänglichen Startbedingungen mit einem kalten Festplattenpuffercache für die Leistungsanalyse anzunähern. Es wirkt sich nicht auf anonymen Speicher aus, der über malloc, vm_allocate usw. zugewiesen wurde.“

Dies ist nützlich, um zu verhindern, dass OSX den Festplattencache auslagert (es ist lächerlich, dass OSX dies überhaupt tut), hat jedoch den Nachteil, dass der Festplattencache freigegeben wird, d. h., wenn der Festplattencache nicht ausgelagert werden soll, würde man einfach mit einem kalten Festplattenpuffercache enden, was sich wahrscheinlich negativ auf die Leistung auswirken würde.

DerFreeMemory-Appund/oderReparieren der Festplattenberechtigungen, um freien Speicher zu erzwingen

Hilft nichtFreigebenjeglicher Speicher, nur einige Gigabyte Speicherinhalt werden vom RAM auf die Festplatte verschoben. Letztendlich führt dies zu vielen Swap-Ins, wenn ich versuche, die Anwendungen zu verwenden, die beim Freigeben des Speichers geöffnet waren, da sich ein Großteil der VM jetzt im Swap befindet.

Beschleunigen der Swap-Zuweisung durchdynamischerPagerWrapper

Dies scheint eine gute Möglichkeit zu sein, die Swap-Nutzung zu beschleunigen, behebt aber nicht das Problem des OSX-Swappings, solange noch inaktiver Speicher vorhanden ist.

Deaktivieren des Swaps durch Deaktivierendynamischer Pagerund Neustart

Dadurch wird OSX gezwungen, Swap nicht zu verwenden, was dazu führt, dass das System hängen bleibt, wenn der gesamte Speicher verwendet wird. Keine praktikable Alternative ...

Deaktivieren von Swap mithilfe vonein gehackter Dynamicpager

Ähnlich wie beim Deaktivieren von Dynamicpager oben weisen einige Auszüge aus den Kommentaren zum Blogbeitrag darauf hin, dass dies keine praktikable Lösung ist: „Der inaktive Speicher ist wie üblich hoch“, „Wenn Ihrem System der Speicher ausgeht, hängt sich das gesamte Betriebssystem auf …“, „Wenn Sie den gesamten Speicher des Macs verbrauchen, bleibt der Computer wahrscheinlich hängen“

Zusammenfassend ist mir noch immer keine Möglichkeit bekannt, Mac OS X daran zu hindern, Swap zu verwenden, wenn noch "inaktiver" Speicher vorhanden ist. Wenn dies nicht möglich ist, gibt es vielleicht zumindest irgendwo eine Erklärung, warum OSX lieber Speicher auslagert, derkann jederzeit aus dem Speicher gelöscht werden?

Antwort1

Inaktiver Speicher ist per Definition Speicher, der zum Auslagern bereit ist. Das Auslagern kann das Schreiben in den Swap-Speicher beinhalten.Das ist kein Problemoder Problem, das optimiert werden sollte; es ist in der TatOS X funktioniert wie vorgesehen.

Leider sind die Mitarbeiter des technischen Supports keine Kernel-Entwickler, und das Zitat aus dem Support-Artikel der Apple Knowledge Base ist einfach falsch, wenn es behauptet, dass inaktiver Speicher von Programmen nicht genutzter Speicher ist. Wenn Sie ein Programm beenden, wird sein gesamter residenter Speicher frei; er bleibt nicht im inaktiven Speicher stehen. Der zweite Link zumEntwicklerseiteDie Beschreibung der Funktionsweise der Speicherverwaltung ist eine gute Ressource, sofern sie vollständig gelesen wird.

Es gibt viele Missverständnisse darüber, was „inaktiver Speicher“ in OS X bedeutet. Entgegen diesen Missverständnissen ist nicht der gesamte inaktive Speicher leer, unbenutzt, zwischengespeichert oder löschbar. Tatsächlich kann auch aktiver Speicher zwischengespeichert oder löschbar sein, wenn er kürzlich aufgerufen wurde. Viel inaktiver Speicher enthält auch Daten, die nicht einfach gelöscht werden können. Würde er gelöscht, würden Programme abstürzen, da die gelöschten Seiten gültige Daten enthalten hätten (wie das Zitat des OS X-Entwicklers besagt) und Programme erwarten, dass Daten, die sie im (virtuellen) Speicher gespeichert haben, nicht einfach verschwinden.

Der inaktive Speicher enthält dieselben Datentypen wie der aktive Speicher. Der einzige Unterschied besteht darin, dass OS X festgestellt hat, dass einige Speicherblöcke seit einiger Zeit nicht mehr gelesen oder beschrieben wurden.

Der Grund, warum OS X einige Speicherbereiche als inaktiv und andere als „aktiv“ klassifiziert, hat mit dem Auslagern zu tun. Wenn der Speicher knapp wird, müssen Sie einige Daten auslagern. Die Frage ist: Welche Daten? Wenn Sie Daten auslagern, die ein Programm sofort wieder benötigt, ist das Zeitverschwendung und bringt nichts. Sie möchten also Speicher auslagern, den ein Programm nicht sofort wieder benötigt.

Es ist schwierig vorherzusagen, welche Seiten in Zukunft wahrscheinlich nicht mehr benötigt werden, da ein Programm seinen virtuellen Speicher beliebig verwenden kann und dem Betriebssystem nichts über seine Pläne mitteilen muss. Als Heuristik gilt jedoch, dass die meisten Programme in ihrer Speichernutzung „klebrig“ sind; wenn sie einen Teil des Speichers eine Zeit lang nicht verwendet haben, werden sie diesen Speicher wahrscheinlich auch weiterhin nicht verwenden und wahrscheinlich weiterhin den Speicher verwenden, den sie kürzlich verwendet haben.

Wenn das Betriebssystem also beschließt, einige Daten auszulagern, verwendet es die Strategie, Seiten auszulagern, die in letzter Zeit nicht verwendet wurden. Aus diesem Grund sortiert OS X den Speicher, der von Programmen belegt ist, in zwei Stapel: „aktiv“ und „inaktiv“. Deroben geposteter LinkAuf der Entwicklerseite wird, wenn man sie vollständig liest, erklärt, wie dieser Prozess abläuft:

  • Wenn der Speicher knapp wird, durchsucht das Betriebssystem die aktiven Speicherseiten und setzt auf jeder Seite ein Flag.
  • Wenn ein Programm eine Seite liest oder auf sie schreibt, wird das Flag gelöscht.
  • Wenn die Markierung nach einer gewissen Verzögerung nicht gelöscht wird, wird die Seite in den Stapel „inaktiv“ sortiert.
  • Wenn eine „inaktive“ Seite von ihrem Programm aufgerufen wird, wird sie wieder in den „aktiven“ Stapel zurückgelegt.
  • Wenn der Speicher erschöpft ist, werden die „inaktiven“ Seiten ausgelagert.

Beachten Sie, dass dieser Sortierprozess zur Entscheidung, welcher Speicher ausgelagert werden soll, bei allen modernen Betriebssystemen ähnlich ist. Linux hat die gleichen zwei Listen mit aktiven und inaktiven Seiten, wie inGrundlegendes zum Linux Virtual Memory Manager. Windows könnte mit mehr als zwei Aktualitätsklassen etwas anderes verwenden; ich kann im Moment keine aktuelle, zuverlässige technische Beschreibung finden. Weitere Implementierungen werden auf der Wikipedia-Seite mit dem Titel"Seitenersetzungsalgorithmus". Der einzige Unterschied zu OS X war die Art und Weise, wie die Statistiken angezeigt wurden: Jemand entschied, dass es eine gute Idee wäre, im Aktivitätsmonitor separate Zahlen für aktive und inaktive Aktivitäten anzuzeigen top. Im Nachhinein betrachtet war das wahrscheinlich keine so gute Idee (und dies hat sich in OS X 10.9 geändert).

Dieser Vorgang des Setzens und Löschens von Flags und der Verwaltung aktiver/inaktiver Heaps erfordert etwas Prozessorleistung. Aus diesem Grund führt OS X diesen Vorgang nicht aus, wenn viel freier Speicher vorhanden ist. Die ersten Programme, die Sie starten, werden also als „aktiver“ Speicher angezeigt, bis der freie Speicher knapp wird.

Wenn Sie also bei Null anfangen und immer mehr Programme öffnen, können Sie mit der folgenden Entwicklung im Aktivitätsmonitor rechnen:

  • Erstens gibt es viel „freien“ Speicher und sehr wenig inaktiven Speicher. Dies liegt daran, dass der Memory Flagger noch nicht gestartet wurde.
  • Wenn die Menge des freien Speichers sinkt, startet OS X seinen Speichermarkierungsdienst und Sie werden sehen, wie die Menge der „inaktiven“ Speicherbereiche steigt. Jedes „inaktive“ Bit war vorher „aktiv“.
  • Wenn der freie Speicher aufgebraucht ist, werden Seiten aus dem Stapel „inaktiv“ ausgelagert. Der Memory-Flagger läuft ebenfalls auf Hochtouren und sortiert den Speicher in aktiv und inaktiv. Normalerweise werden Sie viel „inaktiv“ sehen, während in den Swap geschrieben wird, was darauf hinweist, dass der Memory-Flagger das tut, was er soll.

Seitenmussals inaktiv klassifiziert werden, bevor sie ausgelagert werden. Das ist es, was das Zitat von der Apple Developer-Site meint, wenn es heißt: „Diese Seiten enthalten gültige Daten, können aber jederzeit aus dem Speicher freigegeben werden.“ Dies steht im Gegensatz zu aktiven Seiten, die erst freigegeben werden, nachdem sie auf inaktiv herabgestuft wurden. Es gibt verschiedene Möglichkeiten, Seiten freizugeben; wenn die Seite aus einer Datei zugeordnet und nicht geändert wurde, kann sie sofort gelöscht und bei Bedarf erneut gelesen werden. Das Gleiche gilt, wenn es sich um Speicher handelt, der zuvor ausgelagert und seit dem Einlagern nicht geändert wurde. Programme können auch explizit Cache und löschbaren Speicher zuweisen, um Daten zu speichern, die vergessen und bei Bedarf neu erstellt werden können (der Grund, warum ein Programm Cache zuweisen würde, ist jedoch, wenn es viel Zeit in Anspruch nimmt, diese Daten neu zu erstellen). Ein Großteil des inaktiven Speichers ist jedoch Speicher, in den Programme gültige Daten geschrieben haben, und das Auslagern dieser Daten erfordert das Schreiben in den Auslagerungsspeicher.

Wenn Sie sich daher die Menge des „inaktiven“ Speichers im Aktivitätsmonitor ansehen und feststellen, dass viel inaktiver Speicher vorhanden ist, während der Computer in den Swap-Speicher schreibt, können Sie daraus nur schließen, dass das System wie vorgesehen funktioniert.

Es gibt auch eine Verwechslung zwischen inaktivem Speicher und Dateicache. Ich bin mir nicht sicher, warum diese Verwechslung besteht, da der Aktivitätsmonitor sie bereits unter separaten Überschriften auflistet. Cache ist Speicher, der zum Speichern aktueller Daten verwendet wird, die aus dem Dateisystem gelesen oder geschrieben wurden, falls erneut darauf zugegriffen werden muss. Wenn der Speicher knapp wird, neigt OS X dazu, zuerst den Cache zu leeren. Wenn Sie Swap-Thrashing haben und der Aktivitätsmonitor einen großen Cache-Haufen anzeigt (NICHT inaktiv), dannDaswäre ein Problem. Aber inaktiver Speicher ist etwas anderes.

Ignorieren Sie im Zweifelsfall den Unterschied zwischen „inaktiv“ und „aktiv“. Betrachten Sie sie als einen Block „von Programmen genutzter Speicher“ und addieren Sie die beiden Zahlen. So macht es jedes andere Betriebssystem, wenn es Sie über die Speichernutzung informiert.

HINWEIS für OS X 10.9:Mavericks führte die „Speicherkomprimierung“ ein, die mehr oder weniger eine weitere Swap-Ebene darstellt. Aktive Seiten werden jetzt als inaktiv klassifiziert, dann komprimiert (was je nach verwendetem Tool als Kernelspeicher angezeigt werden kann) und dann in den Swap geschrieben, wenn die Speichernutzung zunimmt. Mavericks zeigt im Aktivitätsmonitor auch keine separaten Zahlen für aktive und inaktive Seiten mehr an, da sich dies als nicht sinnvoll herausgestellt hat, insbesondere angesichts der damit verbundenen Missverständnisse.

Antwort2

Es gibt derzeit keine einfache Möglichkeit, das Swappiness-Verhalten (oder so wird es genannt) von macOS X anzupassen. Es sind jedoch einige Hacks verfügbar (erfordert Entwicklerkonto und SDK):

http://cestdelamerde.com/archives/22-Killing-Mac-OS-X-Swapping-How-To-Disable-dynamic_pager.html

http://dropsafe.crypticide.com/article/3848

Viel Glück!

Nachtrag. Ich schätze, Sie möchten vielleicht diese Antwort (auch von mir) lesen, um einen allgemeineren Überblick über aktive, inaktive und andere Speicher in MacOSX zu erhalten:Verkabelter Speicher vs. aktiver Speicher in OS X

Antwort3

Dies ist zwar keine dauerhafte Lösung, kann aber zumindest dabei helfen, inaktiven Speicher zurückzugewinnen und möglicherweise das gefürchtete Auslagern zu vermeiden:http://itunes.apple.com/nz/app/freememory/id460931672?mt=12

Das Tool ist kostenlos und recht einfach zu verwenden. Wählen Sie nach dem Start die Option „Speicher freigeben“ in der Systemsymbolleiste/im Systemmenü.

Anders als bei der Speicheranzeige des ActivityMonitors wird nur der freie Speicher angezeigt, was ein besserer Indikator dafür zu sein scheint, ob ein Swapping stattfindet oder nicht.

Antwort4

Ich wette, darauf gibt es keine richtige Antwort. Dasselbe gilt für den Speicher, der aktiv bleibt, wenn Sie Ihren Mac in den Ruhezustand versetzen. Er wächst einfach mit jedem Ruhezustand, den Sie versetzen.

Auf der „Spaß“-Seite (sprich: teuer) können Sie Ihren Speicher aufrüsten oder die Festplatte durch eine SSD ersetzen, sodass der Austausch nicht zu Leistungseinbußen führt. Ich habe die erste Option gewählt, da Corsair-Speicher jetzt zu einem vernünftigen Preis erhältlich ist.

16 GB RAM

verwandte Informationen