Befehl vmstat

Das erste Tool, das verwendet wird, ist der Befehl vmstat , der schnell kompakte Informationen zu verschiedenen Systemressourcen und den zugehörigen Leistungsproblemen bereitstellt.

Der Befehl vmstat meldet Statistiken zu Kernel-Threads in der Ausführungs-und Warteschlange, Speicher, Paging, Platten, Interrupts, Systemaufrufen, Kontextwechseln und CPU-Aktivität. Die zurückgemeldete CPU-Aktivität ist eine prozentuale Aufgliederung des Benutzermodus, des Systemmodus, der Leerlaufzeit und des Wartestatus für Platten-E/A.
Hinweis: Wenn der Befehl vmstat ohne Intervall verwendet wird, wird ein einzelner Bericht generiert. Der einzelne Bericht ist ein durchschnittlicher Bericht ab dem Zeitpunkt, zu dem das System gestartet wurde. Sie können nur den Parameter Anzahl mit dem Parameter Intervall angeben. Wenn der Parameter Intervall ohne den Parameter Anzahl angegeben wird, werden die Berichte kontinuierlich erstellt.
Als CPU-Monitor ist der Befehl vmstat dem Befehl iostat überlegen, da seine einzeilige Ausgabe pro Bericht beim Blättern einfacher zu durchsuchen ist und weniger Systemaufwand entsteht, wenn viele Platten an das System angeschlossen sind. Das folgende Beispiel kann Ihnen helfen, Situationen zu identifizieren, in denen ein Programm nicht mehr oder zu CPU-intensiv ist, um in einer Mehrbenutzerumgebung ausgeführt zu werden.
# vmstat 2
kthr     memory             page              faults        cpu
----- ----------- ------------------------ ------------ -----------
 r  b   avm   fre  re  pi  po  fr   sr  cy  in   sy  cs us sy id wa
 1  0 22478  1677   0   0   0   0    0   0 188 1380 157 57 32  0 10
 1  0 22506  1609   0   0   0   0    0   0 214 1476 186 48 37  0 16
 0  0 22498  1582   0   0   0   0    0   0 248 1470 226 55 36  0  9

 2  0 22534  1465   0   0   0   0    0   0 238  903 239 77 23  0  0
 2  0 22534  1445   0   0   0   0    0   0 209 1142 205 72 28  0  0
 2  0 22534  1426   0   0   0   0    0   0 189 1220 212 74 26  0  0
 3  0 22534  1410   0   0   0   0    0   0 255 1704 268 70 30  0  0
 2  1 22557  1365   0   0   0   0    0   0 383  977 216 72 28  0  0

 2  0 22541  1356   0   0   0   0    0   0 237 1418 209 63 33  0  4
 1  0 22524  1350   0   0   0   0    0   0 241 1348 179 52 32  0 16
 1  0 22546  1293   0   0   0   0    0   0 217 1473 180 51 35  0 14

Diese Ausgabe zeigt den Effekt der Einführung eines Programms in einer engen Schleife zu einem stark ausgelasteten Mehrbenutzersystem. Die ersten drei Berichte (die Zusammenfassung wurde entfernt) zeigen den Systemausgleich bei 50-55 Prozent Benutzer, 30-35 Prozent System und 10-15 Prozent E/A-Wartestatus. Wenn das Schleifenprogramm beginnt, werden alle verfügbaren CPU-Zyklen verbraucht. Da das Schleifenprogramm keine Ein-/Ausgabe ausführt, kann es alle zuvor nicht verwendeten Zyklen aufgrund des E/A-Wartestatus aufnehmen. Schlimmer noch, es stellt einen Prozess dar, der immer bereit ist, die CPU zu übernehmen, wenn ein nützlicher Prozess sie freigibt. Da das Schleifenprogramm eine Priorität hat, die der aller anderen Vordergrundprozesse entspricht, muss es die CPU nicht unbedingt aufgeben, wenn ein anderer Prozess zuteilbar wird. Das Programm wird ungefähr 10 Sekunden lang ausgeführt (fünf Berichte), und dann kehrt die vom Befehl vmstat gemeldete Aktivität zu einem normaleren Muster zurück.

Bei optimaler Nutzung würde die CPU 100 Prozent der Zeit arbeiten. Dies gilt für ein Einzelbenutzersystem ohne gemeinsame Nutzung der CPU. Im Allgemeinen, wennus+syZeit liegt unter 90 Prozent, ein Einzelbenutzersystem wird nicht als CPU beschränkt betrachtet. Wenn jedochus+syZeit auf einem Mehrbenutzersystem überschreitet 80 Prozent. Die Prozesse können Zeit in der Ausführungswarteschlange warten. Die Antwortzeit und der Durchsatz können darunter leiden.

Um zu überprüfen, ob die CPU der Engpass ist, betrachten Sie die viercpuSpalten und die beidenkthr(Kernelthreads) Spalten im Bericht vmstat . Es kann sich auch lohnen, sich diefaultsSpalte:

  • CPU

    Prozentuale Aufgliederung der CPU-Auslastung während des Intervalls. DercpuDie Spalten lauten wie folgt:

    • us

      DerusSpalte zeigt den Prozentsatz der im Benutzermodus verbrachten CPU-Zeit. Ein UNIX-Prozess kann entweder im Benutzermodus oder im Systemmodus (Kernel) ausgeführt werden. Im Benutzermodus wird ein Prozess innerhalb seines Anwendungscodes ausgeführt und benötigt keine Kernelressourcen, um Berechnungen durchzuführen, Speicher zu verwalten oder Variablen festzulegen.

    • sy

      DersySpalte enthält Details zu dem Prozentsatz der Zeit, die die CPU einen Prozess im Systemmodus ausgeführt hat. Dazu gehören CPU-Ressourcen, die von Kernelprozessen (kprocs) und anderen Prozessen belegt werden, die Zugriff auf Kernelressourcen benötigen. Wenn ein Prozess Kernelressourcen benötigt, muss er einen Systemaufruf ausführen und wird dadurch in den Systemmodus umgeschaltet. Das Lesen oder Schreiben einer Datei erfordert beispielsweise Kernelressourcen, um die Datei zu öffnen, eine bestimmte Position zu suchen und Daten zu lesen oder zu schreiben, sofern keine Speicherzuordnungsdateien verwendet werden.

    • id

      DeridDie Spalte zeigt den Prozentsatz der Zeit an, in der sich die CPU im Leerlauf oder im Wartestatus befindet, ohne dass die lokale Platten-E/A ansteht. Sind keine Threads zur Ausführung verfügbar (die Ausführungswarteschlange ist leer), teilt das System einen Thread mit dem Namen waitzu, der auch als idle kprocbezeichnet wird. Auf einem SMP-System kann ein wait -Thread pro Prozessor zugeteilt werden. Der mit dem Befehl ps generierte Bericht (mit der Option -k oder -g 0 ) gibt Folgendes an:kprocoderwait. Wenn der ps -Bericht eine hohe Gesamtzeit für diesen Thread anzeigt, bedeutet dies, dass es erhebliche Zeiträume gab, in denen kein anderer Thread zur Ausführung bereit war oder auf die Ausführung auf der CPU wartete. Das System war daher meist inaktiv und wartete auf neue Tasks .

    • wa

      DerwaSpaltendetails zum Prozentsatz der Zeit, in der die CPU inaktiv war, mit anstehender lokaler Platten-E/A und NFS-angehängten Platten. Wenn mindestens eine ausstehende Ein-/Ausgabe für eine Platte aussteht, während wait aktiv ist, wird die Zeit als Warten auf Ein-/Ausgabe klassifiziert. Wenn der Prozess keine asynchrone Ein-/Ausgabe verwendet, führt eine E/A-Anforderung an die Platte dazu, dass der aufrufende Prozess blockiert (oder inaktiviert) wird, bis die Anforderung abgeschlossen ist. Sobald eine E/A-Anforderung für einen Prozess abgeschlossen ist, wird sie in die Ausführungswarteschlange gestellt. Wenn die Ein-/Ausgaben schneller abgeschlossen werden, könnte mehr CPU-Zeit verwendet werden.

      AwaEin Wert von über 25 Prozent kann darauf hinweisen, dass das Plattensubsystem möglicherweise nicht ordnungsgemäß ausgeglichen ist oder das Ergebnis einer plattenintensiven Arbeitslast ist.

      Informationen zur Änderung anwa, siehe Berichte zur E/A-Wartezeit.

  • kthr

    Die durchschnittliche Anzahl der Kernel-Threads in verschiedenen Warteschlangen pro Sekunde während des Stichprobenintervalls. DerkthrDie Spalten lauten wie folgt:

    • r

      Die durchschnittliche Anzahl der Kernel-Threads, die ausgeführt werden können, einschließlich aktiver Threads und Threads, die auf die CPU warten. Wenn diese Anzahl größer als die Anzahl der CPUs ist, wartet mindestens ein Thread auf eine CPU und je mehr Threads auf CPUs warten, desto größer ist die Wahrscheinlichkeit eines Leistungseinflusses.

    • b

      Die durchschnittliche Anzahl der Kernel-Threads in der VMM-Warteschlange pro Sekunde. Dies schließt Threads ein, die auf Dateisystem-E/A warten, oder Threads, die aufgrund der Steuerung der Speicherauslastung ausgesetzt wurden.

      Wenn Prozesse aufgrund der Speicherauslastungssteuerung ausgesetzt werden, wird die blockierte Spalte (b) Im Bericht vmstat wird die Zunahme der Anzahl der Threads anstelle der Ausführungswarteschlange angegeben.

    • p

      Für vmstat -I Die Anzahl der Threads, die pro Sekunde auf E/A-Operationen für Roheinheiten warten. Threads, die auf Ein-/Ausgaben für Dateisysteme warten, werden hier nicht eingeschlossen.

  • Fehler

    Informationen zur Prozesssteuerung, z. B. Trap-und Interruptrate. DerfaultsDie Spalten lauten wie folgt:

    • in

      Die Anzahl der im Intervall beobachteten Einheiteninterrupts pro Sekunde. Weitere Informationen finden Sie unter Plattenleistung mit dem vmstat-Befehl bewerten.

    • sy

      Die Anzahl der im Intervall beobachteten Systemaufrufe pro Sekunde. Ressourcen sind für Benutzerprozesse über klar strukturierte Systemaufrufe verfügbar. Diese Aufrufe weisen den Kernel an, Operationen für den aufrufenden Prozess auszuführen und Daten zwischen dem Kernel und dem Prozess auszutauschen. Da Workloads und Anwendungen sehr unterschiedlich sind und unterschiedliche Aufrufe unterschiedliche Funktionen ausführen, kann nicht definiert werden, wie viele Systemaufrufe pro Sekunde zu viele sind. Aber in der Regel, wenn diesySpalte erhöht über 10000 Aufrufe pro Sekunde auf einem Einzelprozessor, weitere Untersuchungen werden gefordert (auf einem SMP-System ist die Zahl 10000 Aufrufe pro Sekunde pro Prozessor). Ein Grund könnten "Polling" -Subroutinen wie die Subroutine select () sein. Für diese Spalte ist es ratsam, eine Basismessung zu haben, die eine Zählung für eine normalesyWert.

    • cs

      Die Anzahl der Kontextwechsel pro Sekunde, die im Intervall beobachtet wurden. Die physische CPU-Ressource wird in logische Zeitscheiben von jeweils 10 Millisekunden unterteilt. Wenn ein Thread zur Ausführung terminiert ist, wird er ausgeführt, bis seine Zeitscheibe abläuft, bis er zurückgestellt wird oder bis er freiwillig die Steuerung der CPU aufgibt. Wenn ein anderer Thread die Steuerung der CPU erhält, muss der Kontext oder die Arbeitsumgebung des vorherigen Threads gespeichert und der Kontext des aktuellen Threads geladen werden. Das Betriebssystem verfügt über eine sehr effiziente Kontextwechselprozedur, so dass jeder Schalter in Bezug auf Ressourcen kostengünstig ist. Jede signifikante Zunahme von Kontextwechseln, z. B. wanncsist viel höher als die Platten-E/A und die Netzpaketrate, sollte die Ursache für weitere Untersuchungen sein.