Ich dachte, ich hätte verstanden, wie MacOSX den Speicher verwaltet, aber in letzter Zeit bin ich von seiner Leistung verblüfft. Hier ist die Situation:
- Ich habe ein brandneues Core i7-System mit 8 GB physischem Speicher unter MacOSX 10.6.7. Es gibt einige Apps, die regelmäßig ausgeführt werden und einen Teil des Speichers belegen - Safari, Mail, Xcode, Terminal usw.
- Ich muss drei 64-Bit-Prozesse parallel ausführen, von denen jeder etwa 2000 MB realen Speicher benötigt.
- Obwohl der kabelgebundene Speicher unter 1000 MB bleibt (dh ich habe über 7000 MB für Prozesse zur Verfügung), sehe ich starke Paging-Aktivitäten, die zu einer sehr schlechten Leistung der drei von mir gestarteten speicherintensiven Prozesse führen.
- Anscheinend geht mir nicht der verfügbare RAM aus, da der gemeldete inaktive Speicher bei 2500 MB bleibt und der aktive Speicher nicht über 5000 MB steigt.
Kann mir jemand einen Hinweis geben, warum MacOSX den inaktiven Speicher nicht für die Prozesse freigibt, die ihn benötigen, sondern auf Paging zurückgreift? Gibt es auch eine geeignete Möglichkeit, die Speicherverwaltung durch das System zu beeinflussen?
macos
memory
virtual-memory
Ventzi Zhechev
quelle
quelle
Antworten:
Ich habe auf meinem Computer festgestellt, dass Mac OS X etwas langsam ist, um die richtigen Dinge herauszufinden.
Wenn ich etwas besonders speicherhungriges mache, beende ich oft einige Anwendungen, um es zu verbessern. Safari ist ein riesiges Speicherproblem, wenn es eine Weile ausgeführt wurde und ganz oben auf der Liste der zu beendenden Anwendungen steht. In meinem Fall habe ich versucht, VMWare Fusion ohne ausreichend RAM auszuführen.
Sie wissen das wahrscheinlich, aber hier sind einige Links zur Apple-Dokumentation, die die Speichernutzung und den virtuellen Speicher unter OS X beschreiben:
http://support.apple.com/kb/ht1342
http://developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.html
Hier ist die Erklärung, die gegeben wird: Die inaktive Liste enthält Seiten, die sich derzeit im physischen Speicher befinden, auf die jedoch in letzter Zeit nicht zugegriffen wurde. Es ist schwierig, eine genaue Definition dessen zu erhalten, was dies bedeutet, aber es scheint einen Dateisystem-Cache sowie tatsächlichen inaktiven Speicher zu enthalten.
Inaktiver Speicher ist wahrscheinlich eine schwierige Sache in einem interaktiven GUI-gesteuerten Betriebssystem, in dem ein Benutzer jederzeit zu einer laufenden Anwendung wechseln kann und die Bereitstellung von Reaktionsfähigkeit in solchen Situationen wichtig ist. Die Kehrseite davon ist jedoch die folgende In einer Situation wie Ihrer weiß das Betriebssystem nicht genau, was das Richtige ist.
Es ist möglich, (einen Teil) des inaktiven Speichers mit dem Befehl purge zu löschen. Dies muss möglicherweise durch Installieren der CHUD-Tools installiert werden, möglicherweise ist dies jedoch bereits installiert. Ich habe nicht versucht, den Bereinigungsbefehl zu verwenden, also YMMV ...
Ich bin ein bisschen herumgewandert und habe Ihre Frage vielleicht beantwortet oder auch nicht. Nachdem ich das alles aufgeschrieben hatte, fand ich auf dieser Seite eine weitere Frage, die viele der gleichen Informationen enthält, die auch hilfreich sein könnten.
quelle
purge
Befehl ist genau das, wonach ich gesucht habe. Ich hatte die Support-Artikel in Apples KB gefunden, aber sie waren nicht besonders nützlich.MacOS gibt den inaktiven Speicher frei, aber nur, wenn es wirklich nötig ist. Dieser "inaktive Speicher" kann tatsächlich ein Speicher sein, von dem der Kernel glaubt, dass er ein Kandidat für das Auslagern ist - aber er hat sich noch nicht entschieden, bis mehr Zeit vergeht, ohne dass auf den inaktiven Speicher verwiesen wird (stattdessen konzentriert er sich auf das Auslagern des Speichers das ist wirklich weniger wahrscheinlich, bald wieder verwendet zu werden). In einem solchen Fall führt das "Löschen" des inaktiven Speichers tatsächlich zu Leistungseinbußen (da diese häufig verwendeten Seiten von der Festplatte zurückgelesen werden müssten, bevor Ihr Programm die Ausführung fortsetzen kann).
purge
Für Entwickler ist es nützlich, die Startbedingungen einer Anwendung zu simulieren, z. B. um zu sehen, wie lange es dauert, bis eine Anwendung nach einem Start oder einer langen Pause zum ersten Mal ausgeführt wird. Für den typischen Benutzerpurge
ist dies nicht sehr nützlich (und führt tatsächlich zu vorübergehenden Leistungseinbußen).quelle