Ich habe diesen Blog-Beitrag über die Speicherverwaltung in Mac OS X gelesen:http://workstuff.tumblr.com/post/20464780085/something-is-deeply-broken-in-os-x-memory-management
Ich würde gern Ihre Meinung zu dieser Angelegenheit hören.
Ich habe „nur“ 4 GB Speicher, daher besteht die Möglichkeit einer Kernel-Panic.
Ich habe eine rotierende Festplatte (im Gegensatz zu einer SSD) und sehe gelegentlich Strandbälle, manchmal starte ich sogar meine externe Festplatte, bevor ich fortfahre.
Es heißt, dass im Moment kein Swap verwendet wird. Bedeutet das, dass das Deaktivieren von dynamic_pager nichts bewirkt? Es gibt einige Page-Ins.
Wie sicher ist es, es einfach auszuprobieren? Ich könnte vielleicht ein Skript schreiben, das den Pager wieder aktiviert, wenn der Speicher knapp wird?
[Update]: Ende des Tages, 26 MB Swap, viel mehr Seitenein- und -ausgänge und viel inaktiver Speicher.
Antwort1
OS X hat drei Probleme, die dazu beitragen:
Standardmäßig werden alle Daten, die auf die Festplatte geschrieben oder von ihr gelesen werden, mit höherer Priorität im RAM zwischengespeichert als aktuelle Programmdaten. Anwendungen können dies mit der
F_NOCACHE
Option auf Deskriptorbasis deaktivierenfcntl()
, aber nur wenige tun dies. Infolgedessen führt eine hohe Festplattenaktivität dazu, dass Speicher, der gerade nicht verwendet wird, ausgelagert wird. Dies führt zu mehr Festplattenaktivität sowohl für das Auslagern als auch für das spätere Wiedereinlesen dieses Speichers, zusätzlich zur ursprünglichen Festplattenaktivität.HFS+ kann mit gleichzeitigem Dateizugriff nicht gut umgehen. Insbesondere das gleichzeitige Öffnen und Schließen vieler verschiedener Dateien führt zu enormen Konflikten, und es kann praktisch immer nur ein Öffnen/Schließen gleichzeitig erfolgen.
Viele OS X-Anwendungen verteilen ihren Festplattenzugriff auf viele kleine Dateien.
Wenn also zwei oder mehr Anwendungen gleichzeitig auf viele Dateien zugreifen, steigt die E/A-Last der Festplatte exponentiell an, da die Swap-Aktivität mit den Anwendungen um E/A konkurriert.
Das Deaktivieren des dynamischen Pagers könnte den frühen Teil dieser Exponentialkurve verhindern, indem die Möglichkeit entfernt wird, private/schmutzige Anwendungsseiten auf die Festplatte zu übertragen. Stattdessen wird das System wahrscheinlich Seiten aus öffentlichen/sauber zugeordneten Dateien (ausführbare Dateien, Bibliotheken usw.) und aus den zwischengespeicherten Dateidaten bereinigen, die wahrscheinlich von vornherein nicht zwischengespeichert werden sollten. Ob dies die Leistung tatsächlich verbessert, hängt stark davon ab, welche Anwendungen Sie verwenden. Safari ist beispielsweise extrem schlecht darin, seine Festplatten-E/A zu verwalten, daher könnte dies meiner Meinung nach hilfreich sein.
Das Problem würde auftreten, wenn der benötigte RAM tatsächlich den verfügbaren übersteigt: Ein Panikabsturz ist ein sehr abruptes Ende für Ihren Tag. Aber wenn Sie keine großen Dateien bearbeiten oder andere Dinge tun, die von Natur aus speicherintensiv sind, könnte dies selten genug vorkommen, um ein Risiko einzugehen.
Übrigens können Sie mit dem lsof
Befehl sehen, welche Dateien von welchen Prozessen geöffnet werden, und mit dem fs_usage
Befehl können Sie ein laufendes Protokoll der Dateivorgänge anzeigen. Beide funktionieren besser, wenn Sie sie als Root oder über ausführen sudo
.