Kann ich feststellen, ob bei einer bestimmten Anwendung unter Mac OS X (10.2+) ein Teil des Arbeitsspeichers ausgelagert wurde (z. B. in eine der /private/var/vm/swapfile*
Dateien)? Und wie viel?
Kopfgeld (150 rps)
Einfache Frage. Die erste richtige Antwort wird akzeptiert, wenn sie weniger als 2 Tage nach Ablauf der Kopfgeldfrist angezeigt wird. Wenn ich dann noch keinen habe, werde ich ihn an jemanden vergeben, der mir die interessanteste neue Tatsache erzählt. Und wenn ich aus den Antworten nichts gelernt habe, werde ich das Kopfgeld an den vergeben, der am schönsten schreibt.
macos
mac
swap
virtual-memory
Charles Stewart
quelle
quelle
Antworten:
Ich habe viel gegoogelt ;-) Soweit ich weiß, ist der virtuelle Speicher eines bestimmten Prozesses in Seiten unterteilt , die vom Betriebssystem verarbeitet und der Anwendung so präsentiert werden, als wäre es RAM.
In OS X, basierend auf dem Mach-Kernel, wird dies von einem Daemon behandelt, der aufgerufen wird
dynamic_pager
. Dieser Prozess generiert die Swap-Datei (en) in/private/var/vm
wie Sie erwähnen. Diese Auslagerungsdateien werden nicht auf Anwendungsbasis generiert, sondern auf der Basis des "Bedarfsspeichers". Die Auslagerungsdateien sind in Seiten von 4096 Bytes unterteilt, und die Seiten werden dann den Prozessen zugewiesen, die (nach Ansicht des Betriebssystems) virtuellen Speicher benötigen. Daher können Sie einer bestimmten Anwendung keine Auslagerungsdatei zuordnen, aber Sie können sehen, wie viele Seiten ein bestimmter Prozess verwendet.Möglicherweise möchten Sie den Befehl
vm_stat
in Termial versuchen . Auf diese Weise erhalten Sie eine Statistik der VM-Nutzung (beachten Sie, dass 'Seitengröße' und Anzahl der aktiven Seiten der Größe Ihrer Auslagerungsdatei (en) entsprechen). Dies erklärt auch, warum Sie mit VM mehrere Prozesse haben können, aber nur ein paar Swap-Dateien.Andere lustige Befehle sind
vmmap [process id]
undpagestuff
.quelle
vmmap [pid]
odervmmap -pages [pid]
die Antwort auf den zweiten Teil Ihrer Frage?Der
vmmap PID
Befehl sollte Ihnen einige hilfreiche Statistiken in Zahlen zu einem bestimmten Prozess geben.quelle
Basierend auf den hier veröffentlichten Ideen habe ich diese kleine Codezeile erstellt:
Daraufhin wird der Zusammenfassungsabschnitt (3 Zeilen) der vmmap-Ausgabe angezeigt. Ich habe
notifyd
in diesem Beispiel verwendet, aber Sie können das durch jede PID ersetzen, die Sie kennen.Diese Zeile wird versuchen, alle Zusammenfassungszeilen aller laufenden Prozesse aufzulisten. Offensichtlich schlagen einige fehl, weil ihre Prozess-ID bereits weg ist (Prozess beendet), aber im Allgemeinen fand ich, dass dies eine großartige Möglichkeit ist, durch eine Liste von Speicherinformationen zu scrollen und den Top-Swapper zu finden.
Bearbeitet: Einige anonyme Benutzer sahen, dass diese letzte Befehlszeile verbessert werden musste, da die ursprüngliche Variante offensichtlich nicht mehr funktionierte. Also vielen Dank, wer auch immer Sie sind, und es tut mir leid, dass Ihre Bearbeitung abgelehnt wurde. (Der erste Befehl lautete zuvor 'ps xa' und führte dazu, dass vmmap fehlschlug, weil die Überschrift von ps darauf geworfen wurde.)
Weitere Verbesserung: Wenn Sie den Namen des Programms sofort kennen möchten, verwenden Sie diese kleine Änderung
Mit einer kleinen Änderung am anderen Ende dieses Befehls können Sie nach bestimmten Programmnamen oder Befehlszeilenpfadkomponenten filtern. Hier sehen wir uns nur beispielhaft alle Prozesse aus 'Library / PrivateFrameworks' an.
quelle
ps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'
. Bei Strg + C hört es immer noch nicht auf, aber bei vmmap-Fehlern hört es auch nicht auf.Öffnen Sie den Aktivitätsmonitor in Ihrem Ordner / Programme / Dienstprogramme, und es gibt eine Spalte für den virtuellen Speicher, die dies anzeigt. Sie können auf die Kopfzeile des virtuellen Speichers klicken, um nach den meisten oder am wenigsten von der Anwendung verwendeten zu sortieren. Stellen Sie außerdem sicher, dass "Meine Prozesse" in "Alle Prozesse" geändert wird, und beachten Sie, dass eine Anwendung mehrere Prozesse haben kann. Beispielsweise besteht die Drittanbieteranwendung Little Snitch aus "Little Snitch Network Monitor" und "Little Snitch UIAgent".
quelle
Wie Ridogi sagte, öffnen Sie Activity Monitor. Navigieren Sie zu dem Prozess, den Sie überprüfen möchten, und klicken Sie auf ... Überprüfen! Klicken Sie dann auf Speicher. Hier erfahren Sie, wie viel Swap der jeweilige Prozess verwendet.
Habe Spaß!
quelle