Windows 7 Shell: Erhalten Sie gesammelte Seitenfehler des Prozesses

326
Kab

Ich möchte die (angesammelten) Pagefaults eines Prozesses aus der Windows-Shell lesen, um zu entscheiden, wann er beendet werden soll. Der Prozess startet dynamisch.

Ich habe den Kill- Teil gefunden (z. B. hier: Wie man einen Prozess automatisch unter Windows nach Prozessnamen überwacht und beendet ), aber ich habe keine Möglichkeit gefunden, die Seitenfehler zu lesen. Ich habe pfmon.exe von den Windows-Ressourcenkits (installierte rktools.exe, obwohl eine Inkompatibilitätswarnung ausgelöst wurde) mit taskmgr ausprobiert und es funktioniert - ich habe es mit MathKernel (dem fraglichen Prozess und nachdem ich es zu PATH hinzugefügt habe) versucht, und pfmon sagt es wird nicht unterstützt.

Ich kenne die Jobliste, aber dies zeigt mir nur die CPU-Zeit und den Speicherbedarf.

Gibt es eine andere Möglichkeit, Seitenfehler zu lesen? Kann der Taskmanager irgendwie automatisch verwendet werden?

Hintergrund:

Dies bezieht sich auf meinen Beitrag über ein Problem in Mathematica hier, für das ich keine Lösung finden konnte (ich habe die 1 Antwort dort versucht). Mein Skript führt 8 parallele Mathematica-Kernel für eine Berechnung aus, die ~ 10 Stunden dauert und manchmal ein oder zwei von ihnen blockieren. Ich starte sie für jede Berechnung bereits neu, aber das Verhalten ist vorherrschend. Im Moment überprüfe ich regelmäßig mit dem Taskmanager nach ihnen und bringe MathKernel.exe-Prozesse ab, die eine Menge Seitenfehler verursachen. Beachten Sie, dass Prozessorzeit / -last und Speicherauslastung nicht hilfreich sind, während die anderen MathKernel.exe-Prozesse noch ausgeführt werden. Deswegen brauche ich die Seitenfehler - ich möchte alle 8 Vorgänge pro Minute vergleichen, und wenn einer der zehnfachen Seitenfehler des anderen hat, möchte ich ihn töten.

2

1 Antwort auf die Frage

2
DavidPostill

Gibt es eine andere Möglichkeit, diese Daten zu lesen?

Sie können pslist von Windows Sysinternals verwenden :

Speicher Abkürzungstaste

Alle Speicherwerte werden in KB angezeigt.

Pri: Priority Thd: Number of Threads Hnd: Number of Handles VM: Virtual Memory WS: Working Set Priv: Private Virtual Memory Priv Pk: Private Virtual Memory Peak Faults: Page Faults NonP: Non-Paged Pool Page: Paged Pool Cswtch: Context Switches 

Der faultsWert ist die Gesamtzahl der Seitenfehler.

Sie benötigen die Prozess-IDs der Prozesse, die Sie überwachen möchten.

Beispielausgabe:

> pslist -m 6272  PsList v1.4 - Process information lister Copyright (C) 2000-2016 Mark Russinovich Sysinternals - www.sysinternals.com  Process memory detail for HAL:  Name Pid VM WS Priv Priv Pk Faults NonP Page firefox 6272 2707156 1038508 1015532 1191600 34880695 194 596 

Sie können eine Batchdatei oder ein PowerShell-Skript verwenden, um diese Ausgabe zu analysieren.

Haftungsausschluss

Ich bin in keiner Weise mit Windows Sysinternals verbunden, ich bin nur ein Endbenutzer ihrer Software.

Danke DavidPostill! Ich habe es ausprobiert und es macht was ich will. Ich werde meine Batchdatei in der anderen Frage posten, die ich verlinkt habe. Kab vor 6 Jahren 0
Ich brauche auch nicht die PID. Ich kann einfach "pslist -m -nobanner MathKernel" verwenden und findet alle Prozesse. Kab vor 6 Jahren 0
@Kab richtig. Meine Antwort war nur eine Illustration. Man muss die Prozesse irgendwie identifizieren ... DavidPostill vor 6 Jahren 0