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 ?
Antworten:
Per Definition ist inaktiver Speicher ein Speicher, der zum Auslagern bereit ist, und beim Auslagern muss er möglicherweise zum Auslagern geschrieben werden. Dies ist kein Problem oder Problem, das optimiert werden sollte. Tatsächlich funktioniert OS X wie geplant .
Leider sind die Autoren des technischen Supports keine Kernel-Entwickler, und das Zitat des Apple Knowledge Base-Supportartikels ist einfach falsch, wenn behauptet wird, dass inaktiver Speicher von Programmen nicht verwendeter Speicher ist. Wenn Sie ein Programm beenden, wird der gesamte residente Speicher frei. es hört in Inactive nicht auf. Der zweite Link zur Entwicklerwebsite, der die Funktionsweise der Speicherverwaltung beschreibt, ist jedoch eine gute Ressource, wenn er vollständig gelesen wird.
Es gibt viele Missverständnisse darüber, was "inaktiver Speicher" in OS X bedeutet. Im Gegensatz zu den Missverständnissen ist nicht jeder inaktive Speicher leer, nicht verwendet, zwischengespeichert oder löschbar. Tatsächlich kann der aktive Speicher auch zwischengespeichert oder gelöscht werden, wenn auf ihn kürzlich zugegriffen wurde. Viel inaktiver Speicher enthält auch Daten, die nicht einfach verworfen werden können. Wenn es verworfen würde, würden Programme abstürzen, da die verworfenen Seiten gültige Daten enthalten hätten (wie aus dem Zitat des OS X-Entwicklers hervorgeht) und Programme erwarten, dass Daten, die sie im (virtuellen) Speicher gespeichert haben, nicht einfach verschwinden.
Inaktiver Speicher enthält dieselben Datentypen wie aktiver Speicher. Der einzige Unterschied besteht darin, dass OS X bemerkt hat, dass einige Speicherbereiche seit einiger Zeit nicht mehr gelesen oder beschrieben wurden.
Der Grund, warum OS X einige Speicherbereiche als inaktiv und andere als "aktiv" einstuft, hat mit Auslagerung zu tun. Wenn der Speicher knapp wird, müssen Sie einige Daten auslagern. Die Frage ist, welche Daten? Wenn Sie Daten auslagern, die von einem Programm sofort wieder benötigt werden, wird Zeit verschwendet und es wird nichts erreicht. Sie möchten also den Speicher auslagern, den ein Programm nicht sofort wieder verwenden muss.
Es ist schwierig vorherzusagen, welche Seiten in Zukunft möglicherweise nicht mehr benötigt werden, da ein Programm seinen virtuellen Speicher nach Belieben verwenden kann und dem Betriebssystem nichts über seine Pläne verrät. Aber als Heuristik sind die meisten Programme in ihrer Speichernutzung "klebrig"; Wenn sie eine Zeit lang keinen Speicher verwendet haben, werden sie diesen Speicher wahrscheinlich nicht mehr verwenden und den Speicher, den sie kürzlich verwendet haben, wahrscheinlich weiterhin verwenden.
Wenn das Betriebssystem einige Daten auslagert, wird die Strategie angewendet, Seiten auszutauschen, die in letzter Zeit nicht verwendet wurden. Aus diesem Grund sortiert OS X den von Programmen belegten Speicher in zwei Stapel von "aktiv" und "inaktiv". Der oben aufgeführte Link zur Entwickler-Website zeigt, wenn er vollständig gelesen wurde, wie dieser Prozess abläuft:
Beachten Sie, dass dieser Sortiervorgang zum Entscheiden, welcher Speicher ausgelagert werden soll, für alle modernen Betriebssysteme ähnlich ist. Linux verfügt über dieselben zwei Listen von aktiven und inaktiven Seiten, wie unter Grundlegendes zum Linux Virtual Memory Manager beschrieben . Windows verwendet möglicherweise etwas anderes mit mehr als zwei Klassen von Aktualität. Ich kann im Moment keine aktuelle, zuverlässige technische Beschreibung finden. Weitere Implementierungen finden Sie auf der Wikipedia-Seite "Algorithmus zum Ersetzen von Seiten " . Der einzige Unterschied zu OS X bestand in der Art und Weise, wie die Statistiken angezeigt wurden: Jemand entschied, dass es eine gute Idee wäre, separate Zahlen für Aktiv und Inaktiv in
top
oder Aktivitätsmonitor anzuzeigen. Rückblickend war dies wahrscheinlich keine so gute Idee (und dies hat sich in OS X 10.9 geändert).Dieses Setzen und Löschen von Flags und das Verwalten von aktiven / inaktiven Heaps beansprucht etwas Prozessorleistung. Aus diesem Grund funktioniert OS X nicht, wenn viel Speicher verfügbar ist. Die ersten Programme, die Sie starten, werden als "aktiver" Speicher angezeigt, bis der freie Speicher fast voll ist.
Wenn Sie also von einem leeren Plan ausgehen und immer mehr Programme öffnen, können Sie im Aktivitätsmonitor den folgenden Fortschritt erwarten:
Seiten müssenals inaktiv eingestuft werden, bevor sie ausgelagert werden. Dies ist, was das Zitat von der Apple Developer Site bedeutet, wenn es heißt: "Diese Seiten enthalten gültige Daten, können aber jederzeit aus dem Speicher freigegeben werden." Dies steht im Gegensatz zu Active-Seiten, die erst freigegeben werden, nachdem sie zu Inactive herabgestuft wurden. Es gibt verschiedene Möglichkeiten, Seiten freizugeben. Wenn die Seite einer Datei zugeordnet wurde und nicht geändert wurde, kann sie sofort gelöscht und bei Bedarf erneut gelesen werden. Ähnlich ist es, 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 bei Bedarf vergessen und neu erstellt werden können (aber der Grund, warum ein Programm Cache zuweisen würde Dies ist der Fall, wenn die Neuerstellung dieser Daten einige Zeit in Anspruch nimmt.
Wenn Sie sich daher die Größe des "inaktiven" Speichers in Activity Monitor ansehen und feststellen, dass zur gleichen Zeit, in der der Computer zum Auslagern schreibt, viele inaktive Speicher vorhanden sind, können Sie nur feststellen, dass das System wie vorgesehen funktioniert.
Es gibt auch eine Verwechslung zwischen inaktivem Speicher und Dateicache. Ich bin nicht sicher, warum es diese Verwirrung gibt, weil Activity Monitor sie bereits unter separaten Überschriften auflistet. Cache ist der Speicher, in dem die zuletzt gelesenen oder aus dem Dateisystem geschriebenen Daten gespeichert werden, falls erneut darauf zugegriffen werden muss. Wenn der Arbeitsspeicher knapp wird, wird der Cache in OS X in der Regel zuerst gelöscht. Wenn Sie Swap Thrashing haben und der Aktivitätsmonitor einen großen Haufen Cache anzeigt (NICHT inaktiv) , ist dies ein Problem. Aber inaktives Gedächtnis ist etwas anderes.
Ignorieren Sie im Zweifelsfall die Unterscheidung zwischen "inaktiv" und "aktiv". Betrachten Sie sie als einen Klumpen "Speicher, der von Programmen verwendet wird", und addieren Sie die beiden Zahlen. Dies ist, was jedes andere Betriebssystem tut, wenn es Sie über die Speichernutzung informiert.
HINWEIS für OS X 10.9: Mavericks führte die "Speicherkomprimierung" ein, bei der es sich mehr oder weniger um eine weitere Auslagerungsebene handelt. Aktive Seiten werden jetzt als inaktiv klassifiziert und dann komprimiert (was je nach den verwendeten Tools als Kernel-Speicher angezeigt wird) und mit zunehmender Speichernutzung zum Auslagern geschrieben. Mavericks hat auch aufgehört, separate Nummern für Aktiv und Inaktiv im Aktivitätsmonitor anzuzeigen, da sich herausstellt, dass dies angesichts der damit verbundenen falschen Vorstellungen nicht als nützlich anzusehen ist.
quelle
Derzeit gibt es keine einfache Möglichkeit, das Swapiness-Verhalten (oder das sogenannte Swapiness-Verhalten) 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!
Nachsatz. Ich vermute, Sie möchten diese Antwort (auch von mir) lesen, um einen allgemeineren Überblick über die aktiven, inaktiven und anderen Speicher in MacOSX zu erhalten: Wired Memory vs. Active Memory in OS X
quelle
Dies ist keine dauerhafte Lösung, kann jedoch dazu beitragen, inaktiven Speicher wiederzugewinnen und möglicherweise das gefürchtete Auslagern zu vermeiden: http://itunes.apple.com/nz/app/freememory/id460931672?mt=12
Das Tool ist kostenlos und ziemlich einfach zu bedienen. Nach dem Start wählen Sie die Option "Freier Speicher" in der Symbolleiste / im Menü des Systems.
Anders als bei der ActivityMonitor-Speicheranzeige wird nur der freie Speicher angezeigt, was ein besserer Indikator für das Fortschreiten des Austauschs zu sein scheint.
quelle
Ab OS X 10.5 gibt es offensichtliche Speicherverwaltungsprobleme in MAC OS X. Das Web war bereits nach einiger Zeit mit Beschwerden über eine dramatische Systemverlangsamung überfüllt. Damals hatte ich einen langsameren Rechner, einen Mac Mini mit 1 GB RAM, und bin (fälschlicherweise) zu dem Schluss gekommen, dass dies an minderwertiger Hardware lag.
Jetzt habe ich 2010 MBP, Core i7, 8 GB RAM, Dual-GPU. Mac OS X Snow Leopard hatte Schmerzen, aber nach der Migration auf OS X Lion wurde die Arbeit an einigen wichtigen Sachen auf dem MAC zum Albtraum.
Ich habe es endlich geschafft, das problematische Szenario zu reproduzieren, also habe ich den Test ausgeführt und den Bildschirm als Video aufgezeichnet.
Leistungsproblem bei MAC OS X Lion - fehlerhafte Speicherverwaltung
Ich führe den Befehl tar + bzip in meinem Ordner Pictures / aus. Kurz vor dem Start führe ich den Befehl "purge" aus, um inaktive / zwischengespeicherte Programmdaten zu löschen.
Sie können auf dem Video sehen, dass der freie Speicher sehr schnell abnimmt und inaktiv ständig steigt. Wenn Sie sich den Befehl "bsdtar" ansehen, wird nur ein Teil des Arbeitsspeichers benötigt, sodass das Problem bei diesem Vorgang nicht auftritt. Sie können nicht sagen, dass es sich um einen Programmspeicherverlust handelt, da das Problem dann nicht im inaktiven RAM, sondern im aktiven / verkabelten RAM liegt.
Als der freie Speicher unter 100 MB sank, startete ich einige Apps, wie Safari, iPhoto und MS Word, und Sie können in dem Video sehen, dass es sogar Minuten dauert, um eine App zu starten, wenn dies normalerweise der Fall ist (wenn es freien RAM gibt) Das Laden würde 3-5 Sekunden dauern.
Ich führe dasselbe Szenario und dieselben Befehle auf meiner Linux Centos 6-Box aus, kein Problem! Die Speicherauslastung beträgt ca. 10-20 MB, keine Probleme mit Cache / Puffer.
Die Speicherverwaltung muss in Mac OS X sehr kaputt sein!
quelle
Ich wette, es gibt keine richtige Antwort darauf. Genauso ist es mit dem Speicher, der aktiv bleibt, wenn Sie Ihren Mac in den Ruhezustand versetzen. Er wächst und wächst mit jedem Schlaf, den Sie machen.
Auf der "spaßigen" Seite (auch bekannt als teuer) können Sie Ihren Speicher aufrüsten oder die Festplatte durch eine SSD ersetzen, sodass das Austauschen nicht zu einem Leistungseinbruch wird. Ich habe mich für die erste Option entschieden, da der Corsair-Speicher jetzt zu einem vernünftigen Preis erhältlich ist.
quelle