Wie viel Swap verwendet eine bestimmte Mac-Anwendung?

15

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.

Charles Stewart
quelle
Das ist so eine schlechte Frage. Die Zahl, nach der Sie suchen, würde sich ändern, weil Sie versuchen, sie zu messen (denken Sie an das Heisenberg-Unsicherheitsprinzip). Weiterhin würde es sich ständig ändern, abhängig von anderen Anwendungen und deren Speicheranforderungen, Io-Mustern und Prozesspriorität. Wenn Sie die Nummer finden, ist sie nur dann von Nutzen, wenn Sie den OS-Code bearbeiten, da Sie aus Sicht der Anwendung wenig tun müssen, um sie zu ändern.
Gavaletz
3
@gavaletz: Heute morgen von der falschen Seite aufstehen? Ich möchte die Art von Swap-Profiling, die Linux mit / proc / $ pid / smaps ermöglicht. In der Regel kann ich plötzliche Ausbrüche von Swap-Aktivitäten anhand meiner Ohren erkennen, sodass mich das Ungewissheitsprinzip von Gavaletz nicht sonderlich stört.
Charles Stewart

Antworten:

13

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/vmwie 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_statin 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]und pagestuff.

trolle3000
quelle
Weitere Informationen erhalten Sie übrigens unter developer.apple.com/mac/library/documentation/Darwin/Conceptual/… .
trolle3000
Das sieht vielversprechend aus. Dies scheint eine eindeutige Antwort auf den ersten Teil der Frage zu liefern und lässt auf eine konkrete Antwort auf den zweiten Teil schließen. Ich muss weiter graben ...
Charles Stewart
Ist das nicht vmmap [pid]oder vmmap -pages [pid]die Antwort auf den zweiten Teil Ihrer Frage?
trolle3000
vmmap $ pid gibt eindeutige Informationen darüber, was es als beschreibbare Bereiche einstuft. Es wird nicht zwischen reserviertem (dh austauschbarem) und ausgetauschtem Speicher für schreibgeschützte Bereiche unterschieden, aber möglicherweise ist die Unterscheidung dort nicht so wichtig. Ich werde diese Antwort sehr wahrscheinlich morgen annehmen.
Charles Stewart
5

Der vmmap PIDBefehl sollte Ihnen einige hilfreiche Statistiken in Zahlen zu einem bestimmten Prozess geben.

Ayaz
quelle
sogar vmmap [AppName] funktioniert
Studer
4

Basierend auf den hier veröffentlichten Ideen habe ich diese kleine Codezeile erstellt:

sudo vmmap notifyd | grep -A3 'Summary'

Daraufhin wird der Zusammenfassungsabschnitt (3 Zeilen) der vmmap-Ausgabe angezeigt. Ich habe notifydin 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.

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

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

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

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.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |
Andreas
quelle
Ich bekomme eine Menge Fehler, die besagen, dass vmmap nicht als 32-but-Prozess gestartet werden kann, wodurch xargs angehalten wird. Damit die Karten weiter funktionieren, habe ich es getan 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.
ShadSterling vor
0

Ö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".

ridogi
quelle
4
Das ist falsch. Die Spalte "nubmer in virtual memory" ist eine Summe des Arbeitsspeichers, der sich derzeit im Arbeitsspeicher und in Swap- und MMAP-Dateien befindet, und ich weiß nicht, was sonst noch.
Tadeusz A. Kadłubowski
Bist du sicher? Apple erwähnt es nicht support.apple.com/kb/TA20517
ridogi
1
Die VM-Nummer misst den zugewiesenen, aber noch nicht tatsächlich verwendeten Betrag. Die Auslagerungsdateien haben das, was tatsächlich verwendet wird.
Chealion
@Chealion: Wie definieren Sie den zugewiesenen, aber nicht tatsächlich verwendeten Speicher?
Tadeusz A. Kadłubowski
@tkadlubo: In diesem Fall glaube ich, dass es nur die Diskrepanz zwischen der für einen Prozess angegebenen VM-Größe und den tatsächlich auf die Festplatte ausgelagerten Seiten ist. Ich bin nicht sicher, wie ich es definieren soll, abgesehen davon, dass die VM-Nummer und die Auslagerungsdateien auf der Festplatte unterschiedlich sind.
Chealion 20.01.10
0

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ß!

trolle3000
quelle
3
Auf der Inspect-Seite werden alle möglichen interessanten Dinge aufgelistet, die positiv mit der Antwort auf die Frage zusammenhängen, z. B. #pagefaults, #pageins und die Liste der MMAP-Dateien, aber nirgends die eigentliche Antwort auf die Frage, nach der ich gesucht habe.
Charles Stewart