Wie viel Swap verwendet eine bestimmte Mac-Anwendung?

6387
Charles Stewart

Gibt es eine Möglichkeit, festzustellen, ob bei einer bestimmten Anwendung, die unter Mac OSX (10.2+) ausgeführt wird, ein Teil des Speichers ausgelagert wurde (dh auf eine der /private/var/vm/swapfile*Dateien)? Und wie viel?

Kopfgeld (150 Rps)

Einfache Frage. Die erste richtige Antwort wird akzeptiert, wenn ich sie mit weniger als 2 Tagen nach Ablauf der Kopflaufzeit sehe. Wenn ich noch keine habe, werde ich es an denjenigen vergeben, der mir die interessanteste neue Tatsache erzählt. Und wenn ich aus keiner der Antworten ein einziges lernte, gebe ich die Prämie an denjenigen, der am schönsten schreibt.

14
Das ist so eine schlechte Frage. Die Anzahl, nach der Sie suchen, würde sich ändern, weil Sie versucht haben, sie zu messen (denken Sie an das Heisenberg-Prinzip der Unschärfe). Darüber hinaus würde sich dies ständig ändern, abhängig von anderen Anwendungen und deren Speicheranforderungen, den Mustern und der Prozesspriorität. Wenn Sie die Nummer finden, kann Sie dies nur dann tun, wenn Sie den Code des Betriebssystems bearbeiten, da Sie aus Sicht der Anwendung wenig tun müssen, um sie zu ändern. gavaletz vor 14 Jahren 0
@gavaletz: Geh heute morgen aus dem Bett? Ich möchte die Art von Swap-Profiling, die Linux mithilfe von / proc / $ pid / smaps ermöglicht. Ich kann plötzliche Ausbrüche von Swap-Aktivitäten normalerweise mit meinen Ohren erkennen, so dass ich mich über das Unschärferprinzip von Gavaletz nicht allzu sehr kümmere. Charles Stewart vor 14 Jahren 3

5 Antworten auf die Frage

11
trolle3000

Ich habe viel gegoogelt ;-) Nach meinem Verständnis ist der virtuelle Speicher eines bestimmten Prozesses in Seiten unterteilt, die vom Betriebssystem gehandhabt werden und der Anwendung so präsentiert werden, als ob es RAM wäre.

In OS X, basierend auf dem Mach-Kernel, wird dies von einem aufgerufenen Daemon gehandhabt dynamic_pager. Dieser Prozess generiert die Swap-Datei (en) in, /private/var/vmwie Sie es erwähnen. Diese Auslagerungsdateien werden nicht pro Anwendung generiert, sondern auf der Basis "Bedarfsspeicher". Die Auslagerungsdateien werden in 4096 Byte große Seiten aufgeteilt, und die Seiten werden dann den Prozessen zugeordnet, für die (vom Betriebssystem angenommen wird) virtueller Speicher benötigt wird. Daher können Sie eine Auslagerungsdatei nicht mit einer bestimmten Anwendung verknüpfen. Sie können jedoch sehen, wie viele Seiten ein bestimmter Prozess verwendet.

Möglicherweise möchten Sie den Befehl vm_statin Termial versuchen . Dadurch erhalten Sie eine Statistik der VM-Nutzung (Beachten Sie, dass die Anzahl der aktiven Seiten mit der Seitengröße der Größe Ihrer Swap-Dateien entspricht). Dies erklärt auch, warum Sie mehrere Prozesse mit VM verwenden können, jedoch nur ein paar Auslagerungsdateien.

Andere lustige Befehle sind vmmap [process id]und pagestuff.

Unter http://developer.apple.com/mac/library/documentation/Darwin/Conceptual/KernelProgramming/vm/vm.html können Sie übrigens weitere Informationen erhalten. trolle3000 vor 14 Jahren 0
Das sieht vielversprechend aus. Dies scheint eine eindeutige Antwort auf den ersten Teil der Frage zu geben und deutet auf eine konkrete Antwort auf den zweiten Teil hin. Ich muss weiter graben ... Charles Stewart vor 14 Jahren 0
Ist "vmmap [pid]" oder "vmmap -pages [pid]" nicht die Antwort auf den zweiten Teil Ihrer Frage? trolle3000 vor 14 Jahren 0
vmmap $ pid liefert eindeutige Informationen darüber, was als schreibbare Regionen klassifiziert wird. Es wird nicht zwischen zugewiesenem (dh austauschbarem) und ausgelagertem Speicher für Readonly-Regionen unterschieden, aber vielleicht ist die Unterscheidung dort nicht so wichtig. Ich werde diese Antwort sehr wahrscheinlich morgen annehmen. Charles Stewart vor 14 Jahren 0
5
ayaz

Der vmmap PIDBefehl sollte Ihnen hilfreiche Statistiken über einen bestimmten Prozess geben.

Selbst vmmap [AppName] funktioniert Studer vor 14 Jahren 0
3
Andreas

Basierend auf den hier vorgestellten 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 es notifydin diesem Beispiel verwendet, aber Sie können dies durch eine beliebige PID ersetzen, die Sie kennen.

In dieser Zeile wird versucht, alle Zusammenfassungszeilen aller laufenden Prozesse aufzulisten. Offensichtlich schlagen einige fehl, weil ihre Prozess-ID bereits weg ist (Prozess beendet), aber im Allgemeinen habe ich festgestellt, dass dies eine großartige Möglichkeit ist, durch eine Liste von Speicherinformationen zu scrollen und den obersten Swapper zu erkennen.

ps -o pid= -xa | awk '' | 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. Vielen Dank, wer auch immer Sie sind und es tut mir leid, dass Ihre Bearbeitung abgelehnt wurde. (Der erste Befehl las zuvor 'ps xa' und führte dazu, dass vmmap aufgrund der Überschrift von ps fehlschlug.)

Weitere Verbesserung: Wenn Sie den Namen des Programms sofort wissen möchten, verwenden Sie diese kleine Änderung

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

Durch eine kleine Änderung am anderen Ende dieses Befehls können Sie nach bestimmten Programmnamen oder Befehlszeilenpfadkomponenten filtern. Hier betrachten wir beispielsweise alle Prozesse aus 'Library / PrivateFrameworks'.

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '' | xargs -n 1 sudo vmmap | 
0
ridogi

Öffnen Sie den Aktivitätsmonitor in Ihrem / Applications / Utilities-Ordner und es gibt eine Spalte für virtuellen Speicher, in der Sie darüber informiert werden. Sie können auf den Header des virtuellen Speichers klicken, um nach den meisten oder den wenigsten von der Anwendung verwendeten zu sortieren. Stellen Sie außerdem sicher, dass Sie Meine Prozesse in Alle Prozesse ändern, und beachten Sie, dass eine Anwendung mehrere Prozesse haben kann. Zum Beispiel besteht die Drittanbieteranwendung Little Snitch aus "Little Snitch Network Monitor" und "Little Snitch UIAgent".

Das ist falsch. Die Nubmer in der virtuellen Speicherspalte ist die Summe des Speichers, der sich derzeit im RAM und auf Swap-, mmaped-Dateien befindet. Ich weiß nicht, was sonst noch so ist. Tadeusz A. Kadłubowski vor 14 Jahren 4
Bist du sicher? Apple erwähnt es nicht http://support.apple.com/kb/TA20517 ridogi vor 14 Jahren 0
Die VM-Nummer misst den zugewiesenen, aber noch nicht verwendeten Betrag. Die Auslagerungsdateien haben das, was tatsächlich verwendet wird. Chealion vor 14 Jahren 1
@Chealion: Wie definieren Sie Speicher, der zugewiesen, aber nicht tatsächlich verwendet wird? Tadeusz A. Kadłubowski vor 14 Jahren 0
@tkadlubo: In diesem Fall glaube ich, dass es nur die Diskrepanz zwischen der für einen Prozess angegebenen VM-Größe und den tatsächlichen Seiten ist, die auf die Festplatte ausgelagert werden. Ich bin nicht sicher, wie ich es definieren soll, außer dass ich weiß, dass die VM-Nummer und die Auslagerungsdateien auf der Festplatte unterschiedlich sind. Chealion vor 14 Jahren 0
0
trolle3000

Wie gesagt, öffnen Sie den Aktivitätsmonitor. Navigieren Sie zu dem Prozess, den Sie untersuchen möchten, und klicken Sie auf ... Prüfen! Klicken Sie dann auf Speicher. Auf diese Weise erfahren Sie, wie viel Swap der gegebene Prozess verwendet.

Habe Spaß!

Die Inspect-Seite zeigt mir alle möglichen interessanten Dinge, die positiv mit der Antwort auf die Frage korrelieren, wie #pagefaults, #pageins und die Liste der mmapped-Dateien, aber nirgends die eigentliche Antwort auf die Frage, die ich habe. Charles Stewart vor 14 Jahren 3