MacOS verwendet viel virtuellen Speicher / Swap

Ich habe ein MacBook Pro bei der Arbeit und ich denke, es verwendet zu viel Swap anstelle von RAM.

Model Name: MacBook Pro
Model Identifier:   MacBookPro13,1
Processor Name: Intel Core i5
Processor Speed:    2 GHz
Number of Processors:   1
Total Number of Cores:  2
L2 Cache (per Core):    256 KB
L3 Cache:   4 MB
Memory: 16 GB
Boot ROM Version:   MBP131.0205.B22
SMC Version (system):   2.36f97
Serial Number (system): C02TL0KGGVC8
Hardware UUID:  09325653-7FB0-52CC-A599-063539D1010A

Ich bin es gewohnt, die UNIX-Systemaktivität mit htop. Ich stelle fest, dass mein OS X nie mehr als die Hälfte des RAMs verwendet, sondern stattdessen mehr Swap verwendet. Normalerweise 7 GB Swap, aber es können mehr sein.

htop-Bericht

Meine Frage ist, sollte mein Betriebssystem vor dem Austausch nicht mehr RAM verwenden? Ich habe gelesen, wie OS X den Austausch handhabt, und ich habe das Gefühl, dass dies ein Verlust an Rechenleistung ist. Das Ein- und Ausschreiben von Seiten ist sehr zeitaufwändig und nicht so schnell wie die Verwendung von RAM

Ich versuche, mit meiner Ubuntu 16.04-Distribution zu Hause zu vergleichen, die nicht tauscht, es sei denn, der Speicher ist voll. Aber vielleicht haben die 2 Betriebssysteme unterschiedliche Verhaltensweisen, obwohl sie beide UNIX-basiert sind.

Ich habe auch die Ausgabe des Befehls ausgedruckt, vm_statum zu überprüfen, ob es einen Unterschied gibt, weil er vielleicht htopnicht genau gemeldet wird. Mir ist aufgefallen, dass htopeine unterschiedliche maximale Auslagerungskapazität von 3 bis 16 gemeldet wird. Warum ist es keine Partition mit fester Größe wie in Ubuntu?

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                                6743.
Pages active:                           1005803.
Pages inactive:                          903490.
Pages speculative:                          361.
Pages throttled:                              0.
Pages wired down:                        837598.
Pages purgeable:                           9241.
"Translation faults":                6115698117.
Pages copy-on-write:                  107293117.
Pages zero filled:                   2540298644.
Pages reactivated:                   1039487337.
Pages purged:                          52550607.
File-backed pages:                       482299.
Anonymous pages:                        1427355.
Pages stored in compressor:             5968822.
Pages occupied by compressor:           1439832.
Decompressions:                      1456775259.
Compressions:                        1606172332.
Pageins:                             1393246141.
Pageouts:                              25235109.
Swapins:                              562867577.
Swapouts:                             582845342.
Die Maschine ist seit 15 Tagen in Betrieb; Sie haben so gut wie keine Chance, nachzuvollziehen, was es in dieser Zeit getan hat. Starten Sie mit einem frischen Boot.
Vielen Dank für den Hinweis, dass ich neu gestartet und meinen Swap bereinigt habe. Ich dachte, macOS säubere nicht verwendete Auslagerungsdateien besser, wenn der Prozess beendet wird (ich wette, mein schuldiger Prozess war ein Jupyter-Notebook, auf dem ein riesiger Datensatz ausgeführt wird).

Antworten (1)

Erstens - ja, das Betriebssystem verwendet im Allgemeinen RAM vor dem Austausch. Dabei geht keine Rechenleistung verloren.

Sie scheinen zu dem Schluss gekommen zu sein, dass macOS Swap verwendet, obwohl es basierend auf dem htop-Screenshot genauso gut freien Speicher verwenden könnte. Sie können diese Schlussfolgerung nicht aus einer einfachen Stichprobe der Speichernutzung ziehen.

In Wirklichkeit könnten Sie Programme ausgeführt haben, die viel RAM verwenden und macOS dazu zwingen, Speicher auf die Festplatte auszulagern. Dann haben Sie einige dieser Programme beendet (oder sie haben einen Teil des RAM freigegeben). Wenn Sie jetzt ein htop-Sample nehmen, werden Sie sehen, dass die RAM-Nutzung gering ist (viel freier RAM), aber Sie verwenden auch viel Swap.

Aber das ist kein Problem – es ist sogar so gewollt! Es wäre für macOS nicht ratsam, mit dem Austauschen der Seiten zu beginnen, die auf der Festplatte abgelegt wurden. Es wird dies tun, wenn sie benötigt werden (dh von Programmen verwendet werden), aber bis dies geschieht, könnte es sein, dass diese Seiten niemals verwendet werden - und daher geht die Zeit verloren, die damit verbracht wird, sie auszutauschen.

Sie schreiben, dass Sie im Vergleich zu Ihrem Ubuntu-PC ein anderes Verhalten beobachten. Sie sollten wissen, dass Sie dieses Verhalten tatsächlich ändern können. Unter Linux können Sie sysctl verwenden, um die Variable vm.swappiness festzulegen. Es wird ändern, wie aggressiv das Betriebssystem Dinge auf die Festplatte auslagert.

Sie fragen auch, warum Ihr macOS-System keinen Fixed-Size-Swap verwendet, wie es Ubuntu tut. Tatsächlich unterstützt Ubuntu mit dem Befehl „swapspace“ auch Swaps mit dynamischer Größe. Sie können minimale und maximale Größen festlegen, und es wird dynamisch Auslagerungsspeicher hinzufügen/entfernen, wenn sich die Anforderungen ändern.

"aber bis das passiert, könnte es sein, dass diese Seiten niemals verwendet werden würden" Ich vermute, dass Auslagerungsseiten nicht bereinigt werden können, wenn ein Programm beendet wird, weil Seiten programmunabhängig sind? Dies führte im Laufe der Zeit zu vielen ungenutzten Auslagerungsdateien, verringert jedoch nicht unbedingt die Betriebssystemleistung bei einem dynamischen Größenaustausch.
Auch habe ich gemischte Gefühle in Bezug auf die htop-Zahl für die RAM-Kapazität. Es geht nie über 9G, aber ich denke, es bezieht sich nur auf den verwendeten Speicher (grün) und nicht auf den Cache-Speicher () . Aber wenn man sich den Ladebalken ansieht, scheint Grün + Gelb fast die volle Kapazität zu erreichen
Nein, du irrst dich. Auslagerungsseiten können bereinigt werden, wenn ein Prozess beendet wird – das Betriebssystem weiß genau, welche Seiten von welchen Prozessen verwendet werden. In der Praxis werden die Seiten in der Auslagerungsdatei als nicht verwendet markiert und regelmäßig zurückgefordert. Dynamische Swap-Größe bedeutet nicht, dass sie nur wächst, sondern auch wieder zurückgeht.
In Bezug auf die htop-Zahl für die RAM-Kapazität. Sie scheinen falsch verstanden zu haben, dass es tatsächlich zwei verschiedene Dinge zeigt. Der Text zeigt (usedmem - Buffers - Caches) im Vergleich zum Gesamt-RAM, während der grafische Balken den usedmem, Buffers und Caches als drei separate Farben anzeigt, die sich zu 100 % summieren. Wenn Sie also nicht genau 0 Byte Puffer und 0 Byte Cache haben, stimmt das Verhältnis von beiden nicht überein.
okey, ich wusste, dass es nicht das war, was ich erwartet hatte. Mit 'Text' verweisen Sie auf die Zahlen, hier 9,88/16GB auf dem Screenshot?
Für die Reinigung der Auslagerungsseiten war mein Punkt, dass das Betriebssystem die Auslagerungsseite nur bereinigen kann, wenn kein anderes Programm sie verwendet, da Seiten von Programmen gemeinsam genutzt werden, wenn ein Programm beendet wird.
@mcmzl Ja, mit Text meine ich die 9,88/16 GB.
@MCMZL Ja, natürlich kann es nur bereinigt werden, wenn es von keinem anderen Prozess verwendet wird. Es scheint jedoch, dass Sie die Dinge verwirren, wenn Sie glauben, dass dies ein wichtiger Teil Ihres Problems ist. In Wirklichkeit müssen Sie sich darüber im Klaren sein, dass die ausgelagerten Seiten normalerweise zu anderen Programmen gehören als dem, das Sie gerade ausgeführt haben und das viel Speicher verbraucht hat. Daher können sie natürlich nicht einfach im Swap gelöscht werden, sondern müssen wieder in den Arbeitsspeicher ausgelagert werden, was nicht geschieht, bevor sie tatsächlich benötigt werden.
Yep hat diesen Punkt über Swap-Seiten verstanden. Wie erklären Sie in Bezug auf die RAM-Kapazität, dass htop nie mehr als 9 GB meldet? Oder sollte ich vielleicht verstehen - als Minuszeichen, als Sie sagten: "Der Text zeigt (usedmem - buffers - caches) im Vergleich zum gesamten RAM"?
Ja "-" ist ein Minus.