Als häufiges Phänomen bei der täglichen Verwendung von OS X (und verschiedenen anderen im Internet veröffentlichten Phänomenen) scheint das System langsam zu werden, wenn kein "freier" Speicher mehr verfügbar ist. Vermutlich liegt dies am Auslagern, da eine hohe Festplattenaktivität erkennbar ist und vm_stat viele Auslagerungen meldet. (Korrigieren Sie mich von falsch)
Die Menge an "inaktivem" RAM beträgt jedoch normalerweise etwa 12,5% -25% des gesamten verfügbaren Speichers (^ 1.), Wenn das Austauschen beginnt / auftritt / endet.
Laut http://support.apple.com/kb/ht1342 :
Inaktiver Speicher
Diese Informationen im Speicher werden nicht aktiv verwendet, wurden aber kürzlich verwendet.
Wenn Sie beispielsweise Mail verwendet und dann beendet haben, wird der von Mail verwendete RAM als inaktiver Speicher markiert. Dieser inaktive Speicher kann wie der freie 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 den aktiven Speicher konvertiert wird, anstatt Mail von der langsameren Festplatte zu laden.
Die inaktive Liste enthält Seiten, die sich derzeit im physischen Speicher befinden, auf die jedoch in letzter Zeit nicht zugegriffen wurde. Diese Seiten enthalten gültige Daten, können jedoch jederzeit aus dem Speicher freigegeben werden .
Grundsätzlich gilt: Wenn ein Programm beendet wurde, wird sein Speicher als inaktiv markiert und sollte jederzeit in Anspruch genommen werden können. Trotzdem wird OS X es vorziehen, den Speicher in die Swap-Datei zu verlagern, anstatt nur diesen Speicher zu beanspruchen, wenn der "freie" Speicher zu niedrig wird.
Warum? Was ist der Vorteil dieses Verhaltens gegenüber der sofortigen Freigabe des inaktiven Speichers und der Nichtberührung der Auslagerungsdatei? Einige Quellen (^ 2.) Weisen darauf hin, dass OS X den "inaktiven" Speicher auslagern würde, um ihn vor der Freigabe auszutauschen. Aber macht das jetzt keinen Sinn, wenn der Speicher zu irgendeinem Zeitpunkt aus dem Speicher freigegeben wird ? Tauschen ist teuer, veröffentlichen ist billig, oder?
Kann dieses Verhalten mit einer Präferenz oder einem bekannten Hack geändert werden? (Am besten ohne das Deaktivieren von swap / dynamic_pager und den Neustart ...)
Ich schätze den Befehl zum Löschen sowie das Konzept des Reparierens von Datenträgerberechtigungen, um freien Speicher zu erzwingen, aber dies sind Möglichkeiten, schmerzhaft mehr freien Speicher zu erzwingen, als die Logik für die Auslagerungs- / Freigabeentscheidung 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 = 87688 , aber auch wenn die OPs die Kernfrage wieder gefragt, keine der Antworten Adressen eine Antwort darauf ...
^ 1. UPDATE 17. März 2012 Seitdem ich diese Frage zum ersten Mal gestellt habe, bin ich von 4 GB auf 8 GB installierten RAM übergegangen, und das Problem bleibt bestehen. Die Menge an "inaktivem" RAM betrug zuvor 0,5 bis 1,0 GB und liegt jetzt in der Regel bei 1,0 bis 2,0 GB, wenn das Austauschen beginnt / auftritt / endet, dh es scheint, dass 12,5 bis 25% des RAM von osx als inaktiv erhalten bleiben Kernel-Logik.
^ 2. Zum Beispiel https://apple.stackexchange.com/questions/4288/was-es-es-bedeutet-wenn-ich-lots-von-inaktivem-Speicher-am-Ende-der-Arbeit Tag :
Sobald der gesamte Arbeitsspeicher belegt ist (der freie Arbeitsspeicher ist 0), schreibt das Betriebssystem inaktiven Arbeitsspeicher in die Auslagerungsdatei, um mehr Platz im aktiven Arbeitsspeicher zu schaffen.
UPDATE 17. März 2012
Hier ist eine Zusammenfassung der Methoden, die bisher vorgeschlagen wurden, um zu helfen:
Der Befehl zum Löschen
Msgstr "Wird verwendet, um die anfänglichen Startbedingungen mit einem Cold Disk Buffer Cache für die Leistungsanalyse zu approximieren. 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 Festplatten-Cache auslagert (was lächerlich ist, dass osx dies überhaupt tut), jedoch mit dem Nachteil, dass der Festplatten-Cache freigegeben wird, was bedeutet, dass dies nicht der Fall ist, wenn der Festplatten-Cache freigegeben wird Ausgetauscht würde man einfach mit einem kalten Plattenpuffer-Cache enden, was sich wahrscheinlich negativ auf die Leistung auswirkt.
Die FreeMemory-App und / oder Repairing Disk-Berechtigungen zum Erzwingen von freiem Speicher
Es hilft nicht, Speicher freizugeben , sondern nur einige Gigabyte an Speicherinhalten vom RAM auf die Festplatte zu verschieben. Am Ende führt dies zu vielen Swap-Ins, wenn ich versuche, die Anwendungen zu verwenden, die geöffnet waren, während Speicher freigegeben wurde, da ein Großteil der VM jetzt auf Swap ist.
Beschleunigung der Swap-Zuweisung mit DynamicPagerWrapper
Scheint eine gute Sache zu sein, um die Auslagerungsnutzung zu beschleunigen, geht aber nicht auf das Problem der Auslagerung von Osx ein, solange noch inaktiver Speicher vorhanden ist.
Deaktivieren Sie Swap, indem Sie DynamicPager deaktivieren und neu starten
Dadurch wird osx gezwungen, nicht auf den Preis des hängenden Systems zu tauschen, wenn der gesamte Speicher belegt ist. Keine praktikable Alternative ...
Swap mit einem gehackten DynamicPager deaktivieren
Ähnlich wie bei der Deaktivierung von DynamicPager oben deuten einige Auszüge aus den Kommentaren zum Blog-Beitrag darauf hin, dass dies keine praktikable Lösung ist: "Der inaktive Speicher ist wie üblich hoch". "Wenn auf Ihrem System nicht mehr genügend Arbeitsspeicher vorhanden ist, hängt sich das gesamte Betriebssystem auf ...", "Wenn Sie den gesamten Arbeitsspeicher des Mac belegen, bleibt der Computer wahrscheinlich hängen."
Zusammenfassend ist mir immer noch nicht bekannt, wie ich Mac OS X daran hindern kann, Swap zu verwenden, wenn noch "inaktiver" Speicher vorhanden ist. Wenn es nicht möglich ist, gibt es vielleicht irgendwo eine Erklärung dafür, warum osx es bevorzugt, Speicher auszutauschen, der jederzeit aus dem Speicher freigegeben werden kann ?