Warum verwendet OS X Swap, wenn es viel "inaktiven Speicher" gibt?

22

Ich benutze OS X seit einigen Monaten (Lion und jetzt Mountain Lion). Ich habe 8 GB auf meinem Mini und fast täglich kommt es dem jetzt nahe. Auf einem Windows 7-Computer mit 8 GB hatte ich nie ein solches Problem. Wie auch immer, ich habe über das Internet gelesen, dass der inaktive Speicher der App-Cache der Programme ist, die kürzlich geschlossen wurden und zum schnelleren erneuten Öffnen verwendet werden können. Dieser inaktive Speicher kann bei Bedarf für eine neue App freigegeben werden. Es ist nicht freigegeben. Stattdessen beginnt OS X zu tauschen. Meine Frage ist also, warum OS X Swap verwendet, wenn es viel "inaktiven Speicher" gibt. Hier ein Bildschirm, der zeigt, was ich meine:

Bildbeschreibung hier eingeben

Ich hoffe wirklich, dass es eine Möglichkeit gibt, OS X dazu zu bringen, diese 2,69 GB zu nutzen, bevor ich mit dem Tauschen beginne.

Balchev
quelle
Ja, es ist seltsam. Ist es eine Anwendung, die den gesamten Arbeitsspeicher belegt? Möglicherweise schränkt OSX die Verwendung von Anwendungen so ein, dass nicht mehr als 80% des Arbeitsspeichers gleichzeitig verwendet werden. Inaktiv bedeutet jedoch nicht, dass es kostenlos ist. Es ist für etwas reserviert.
Piotr Kula
Nein - viele Apps, Browser, Eclipse und so weiter. Soweit ich gelesen habe, ist es kostenlos, da es einen kürzlich geschlossenen Apps-Cache gibt. Es sollte eine Möglichkeit geben, OS X nicht
auszutauschen,
Ich kann es jederzeit reproduzieren und bei Bedarf einen Bildschirm des Aktivitätsmonitors
erstellen
2
Inaktiver Speicher ist kein freier Speicher.
Kinokijuf
2
@kinokijuf es sollte jedoch als freier Speicher fungieren, wenn kein freier Speicher mehr vorhanden ist. Wenn inaktiver Speicher ohnehin immer auf die Festplatte ausgelagert wird, hat die Unterscheidung zwischen aktiv und inaktiv keinen Sinn.
Pieter

Antworten:

18

Das Austauschen geschah anscheinend, als die inaktiven RAM-Seiten tatsächlich aktiv waren.

( Update: Wie in einem Kommentar klargestellt, ist dies nicht der Fall. Daher können Personen mit demselben Problem mit der horizontalen Regel fortfahren .)

Dh es liefen viele Programme und der Kernel hat einige Seiten ausgetauscht. Dann haben Sie einige Programme beendet. Der Kernel markiert seine RAM-Seiten als inaktiv. Es werden jedoch erst Seiten in den Arbeitsspeicher zurückgeschrieben, wenn diese Seiten benötigt werden. Dies führt dazu, dass sowohl inaktive als auch ausgelagerte Seiten vorhanden sind.

Warum nicht präventiv Seiten einlagern? Denn das wäre Wetten gegen die Gewinnchancen: Langfristig verlierst du. Stellen wir uns ein vereinfachtes Beispiel vor: Zwei Programme A und B, die nicht gleichzeitig in den Arbeitsspeicher passen. Programm A wird noch ausgeführt und alle ausgelagerten Seiten gehören zu A. Programm B wurde beendet und alle inaktiven Seiten gehören zu B.

Wenn der Kernel die Seiten von A präventiv einlagert und sofort danach:

  • Programm A muss auf seine Seiten zugreifen -> Sie gewinnen - die Seiten befinden sich bereits im RAM.
  • Sie starten B erneut -> Sie verlieren - Sie haben die Kosten für das Bringen der Seiten in den RAM "bezahlt" und müssen sie jetzt zurückschicken.
  • Sie starten ein anderes Programm C -> Sie verlieren, wenn A und C nicht gleichzeitig in den Arbeitsspeicher passen. Wenn sie passen, bist du gerade.

Berücksichtigen Sie auch, dass das Auslagern (Schreiben auf die Festplatte) teurer ist als das Einlagern (Lesen von der Festplatte). Das macht diese "Wette" noch unattraktiver.

Kurz gesagt: Vertraue deinem Kernel und versuche nicht, ihn auszutricksen.


Update: Es hat sich herausgestellt, dass inaktiver Speicher nicht funktioniert, da der Artikel Verwenden der Aktivitätsüberwachung zum Lesen des Systemspeichers viele Leute zu der Annahme veranlasst hat, dass er funktioniert. Die im Artikel angegebene Definition für inaktiven Speicher ist korrekt:

Diese Informationen befinden sich im RAM, werden jedoch nicht aktiv verwendet. Sie wurden kürzlich verwendet.

Das folgende Beispiel ist jedoch völlig irreführend und zu stark vereinfacht (wie mein Beispiel, um ehrlich zu sein):

Wenn Sie beispielsweise Mail verwendet und dann beendet haben, wird der von Mail verwendete RAM als inaktiver Speicher markiert. Inaktiver Speicher kann wie freier Speicher von einer anderen Anwendung verwendet werden. Wenn Sie jedoch Mail öffnen, bevor der inaktive Speicher von einer anderen Anwendung verwendet wird, wird Mail schneller geöffnet, da der inaktive Speicher in aktiven Speicher konvertiert wird, anstatt ihn vom langsameren Laufwerk zu laden.

Ich habe nach weiteren Online-Ressourcen gesucht und bin zu diesem Thread in der Darwin-Kernel-Mailingliste gelangt, der ziemlich informativ ist. Zitat von Jim Magee (aus dem Darwin-Team - glaube ich):

Kurz gesagt, das Kernel-VM-System durchsucht beim Umgang mit dem Speicherdruck die verwendeten Seiten und versucht, ein Gleichgewicht zwischen aktiven und inaktiven Markierungen herzustellen. Die inaktiven Seiten werden auf Wiederverwendung geprüft, während sie als inaktiv markiert sind. Wenn sie wiederverwendet wurden, werden sie als aktiv markiert und eine andere Seite muss von aktiv in inaktiv versetzt werden, um festzustellen, ob sie aktiv verwendet wird. Inaktiv ist also eine falsche Bezeichnung. Es ist eine Abkürzung für "Möglicherweise inaktiv, versuchen wir das zu überprüfen."

Wie Sie festgestellt haben, ist das interne Gleichgewicht, das wir (derzeit) anstreben, ungefähr 2/3 aktiv gegenüber 1/3 inaktiv ...

Dies erklärt das beobachtete Verhalten. Dh die inaktiven Seiten, die Sie sehen, gehören zu laufenden Programmen, die in letzter Zeit nicht benutzt wurden. Wenn Sie also ein neues Programm starten, werden inaktive Seiten ausgetauscht. Gleichzeitig werden Seiten aus anderen Programmen als inaktiv markiert, um das 2/1-Verhältnis von aktiv zu inaktiv beizubehalten.

Der Thread enthält auch einige Vorschläge, um mehr über die Darwin-Interna zu erfahren. Es gibt auch einige Vorschläge für den Fall, dass Sie aufgrund von Beachball-Problemen mit der Untersuchung der Speichernutzung begonnen haben (die normalerweise wenig damit zu tun haben).

Die Schlussfolgerung bleibt die gleiche: Vertrauen Sie Ihrem Kernel und versuchen Sie nicht, ihn auszutricksen. :-)

m000
quelle
1
Hallo, nicht sicher, ob du mich verstehst - ich spreche für den Moment, wenn du 100-200MB freien Speicher, 2,6 GB "inaktiv" hast und ein anderes Programm startest, sagen wir Eclipse, Xcode und so weiter. Was passiert ist, dass es diese nicht verwendet 2,6 GB und stattdessen aus dem aktiven Speicher tauschen. Ich bin mir nicht sicher, ob Sie verstehen, was ich meine. Wie auch immer, danke für Ihre Antwort
Balchev
Das ist jetzt klar. Vielleicht solltest du das Beispiel in diesem Kommentar zu deiner Frage hinzufügen. Ich habe zusätzliche Informationen hinzugefügt, die meiner Meinung nach eine angemessene Erklärung für das liefern, was Sie beobachten.
m000
Ich bin mir nicht sicher, ob ich meine ursprüngliche Antwort korrigieren soll. Es erklärt einen anderen Fall (da ich Ihre Frage vor Ihrem Kommentar nicht richtig verstanden habe) und kann die Leute verwirren.
m000
So wie Radoo in seinem Kommentar sagt - "OS X ist ein hungriges Biest". Ich hatte nicht erwartet, dass OS X so viel Speicherhunger hat (sowohl Lion als auch jetzt Mountain Lion), und deshalb dachte ich, dass hier etwas faul ist. Vielen Dank für Ihre aktualisierte Antwort.
Balchev
6

Sie können das Paging sicher deaktivieren, wenn Sie über genügend RAM verfügen.

Probieren Sie diese Befehle aus.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

Starten Sie dann neu und vergewissern Sie sich, dass der dynamic_pager-Prozess nicht mehr ausgeführt wird.

Stellen Sie sicher, dass in keine Auslagerungsdateien erstellt wurden /private/var/vm/.

Versuchen Sie, die folgenden Befehle erneut zu aktivieren:

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Sie können Spotlight auch deaktivieren, um mehr RAM freizugeben und die Festplattenaktivität zu verringern. Die folgenden Befehle werden zum Deaktivieren und Aktivieren von Spotlight verwendet.

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
Arundevma
quelle
Ich habe über das Internet gelesen, dass das Deaktivieren von Swap unter OSX zu unerwartetem Verhalten des Systems und Abstürzen führen kann. Ist das wahr?
Balchev
Wenn Ihr Gedächtnis niedrig ist, wird es. Aber wenn Sie genug Speicher haben, wie 8 GB, wird es kein Problem verursachen.
Arundevma
2
"Genug Speicher, wie 8 GB" - Entschuldigung, das ist so süß ... :)
Bombe
0

Sie können nicht viel tun. Warum macht es das? Denn so funktioniert OS X. Der interessante Teil ist, wie der belegte Speicher mit jedem Schlaf, den der Mac bekommt, größer wird.

Was kannst du tun:

  1. RAM aufrüsten.
  2. Führen Sie den heiligen Befehl " purge " aus, um den größten Teil des inaktiven Speichers zu löschen, wann immer dies erforderlich ist.
  3. Swap deaktivieren http://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

quelle
Hallo, ich habe den Befehl purge verwendet, aber die meiste Zeit ist weniger als die Hälfte des "inaktiven" Speichers frei. Ich habe gelesen, dass das Deaktivieren von Swap unter OSX zu unerwartetem Verhalten des Systems und Abstürzen führen kann. Also ging ich mit 1) Jetzt ist es in Ordnung mit 16 GB :) Nur diese Menge an Speicher wird für Server verwendet, nicht für Desktops :) Danke für Ihre Antwort
Balchev
Ich habe 16 GB auf meinem Macbook Pro, das ist kein Server. :) Es ist bekannt, dass OS X ein hungriges Tier ist, wenn es um Speicher geht, insbesondere wenn mehrere mittelgroße / große Apps gleichzeitig verwendet werden. Ich habe es geschafft, alle diese 16 GB zu füllen, ohne eine Bild- / Videobearbeitungssoftware zu öffnen, nur einige Spiele und kleine Apps. Der inaktive Speicher war ungefähr 4 GB ...
Sie müssen auch berücksichtigen, dass viele OS X-Apps bereits 64-Bit sind. 64-Bit-Apps belegen mehr Speicher als 32-Bit-Apps, da der Adressraum immer größer wird.
0

Das System funktioniert wie vorgesehen. Selbst wenn kein Speicherdruck besteht, kann es sinnvoll sein, einige Seiten zu schreiben, die nicht verworfen werden können, aber in letzter Zeit nicht zum Austauschen verwendet wurden, wenn das System nicht ausgelastet ist. Auf diese Weise können diese Seiten bei späterem Speicherdruck aus dem RAM entfernt werden, ohne dass sie erst geschrieben werden müssen, um sie zu tauschen, während das System ausgelastet ist.

David Schwartz
quelle
1
es ist dann schlecht gestaltet. Es ist zu aggressiv bei der Zuweisung und Verwendung von Swap Space.
Mendota
Warum spielt es eine Rolle? Wenn viel freier Swap vorhanden ist, ist die Zuweisung von Swap-Speicher harmlos. Dies gilt insbesondere dann, wenn der Swap keine erforderlichen Daten enthält, da das Entfernen der Zuordnungen keine Kosten verursacht. Dies ist ein gutes Design - arbeiten Sie hart, wenn es fast kostenlos ist, anstatt es später zu verschieben, wenn das System unter Druck steht.
David Schwartz
2
Es ist ein schlechtes Design, wenn es zu aggressiv ist und zu Stottern oder Aufhängen in Programmen führt. In der Zwischenzeit sind weitere acht Gigs im RAM frei: /
Mendota
Ich stimme Mendota zu. Sobald ich Swap vollständig deaktiviert habe, läuft mein System reibungslos, ohne dass es zu Stottern kommt.
Anton Kuzmin
@AntonKuzmin Das hat wirklich nichts damit zu tun, worum es bei dieser Frage geht. Wenn Sie diese Frage lesen, sagt sie überhaupt nichts über Stottern oder irgendwelche Probleme aus.
David Schwartz