Wie kann man sehen, wie viele Kontextwechsel ein Prozess vornimmt?
25
Ich möchte sehen, ob mein Prozess viele Kontextwechsel vornimmt. Ich möchte auch sehen, wie sich das Manipulieren von Aufgabengruppen auf die Anzahl der Kontextwechsel auswirkt.
Ich habe den obigen Watch-Befehl ausprobiert, aber die Ausgabe ist nur 1 (für einen freiwilligen und unfreiwilligen Kontextwechsel). Meine Linux-Kernversion ist 2.6.39-400.214.4.el6uek.x86_64. Ist die Ausgabe von der Linux-Version abhängig?
Andy Dufresne
Fügen Sie bitte Ihre Ausgabe hier ein.
Es ist das gleiche wie in der Antwort erwähnt - "watch -n.5 grep ctxt / proc / 5647 / status"
Andy Dufresne
Ich muss procfs verwenden, aber auf alten Kerneln gibt es keine Werte in /proc/.../status. irgendein Vorschlag ?
Massimo
12
pidstat (1) - Berichtsstatistik für Linux-Tasks. Laut ist man pidstates so einfach wie ebenpidstat -w …
Ich habe den Befehl "watch -n0.5 pidstat -w -I -p 5876" ausgeführt, aber die Ausgabe ist 0 (für beide cswch / s nvcswch / s). Funktioniert dieser Befehl für die Linux-Version 2.6.39-400.214.4.el6uek.x86_64?
Andy Dufresne
Dieser Befehl sollte einwandfrei funktionieren. Aber passen Sie es falsch verwenden , weil , wenn Sie Berichtsintervall nicht angeben „Aufgaben Statistiken sind für die Zeit gemeldet werden , da Systemstart (Booten).“ Ähnlich wie vmstat, iostatund andere. Wenn also aktuelle Statistiken benötigt werden, anstatt watchsie auszuführen, führen Sie sie einfach mit einem Sekundenintervall aus.
Poige
Wie kann ich sehen, dass die Zahlen ständig aktualisiert werden, wenn ich nicht zuschaue? Wenn Sie den Befehl "pidstat -w -I -p 5876 5" ausführen, wartet der Befehl nur 5 Sekunden und gibt dann die Ausgabe aus (erneut als 0). Es läuft nicht wie erwartet kontinuierlich (ich weiß, dass dies im Widerspruch zu der Manpage von pidstat steht - linux.die.net/man/1/pidstat ). Mein Betriebssystem ist Oracle Linux Server 6.4.
Andy Dufresne
Funktioniert `pidstat -w -l -p SELF 1` für Sie?
Poige
4
Um eine Aufzeichnung eines gesamten Prozessablaufs zu erhalten, können Sie das GNU- timeDienstprogramm (verwechseln Sie es nicht mit dem basheingebauten) mit der -vOption verwenden. Hier ist ein Beispiel, bei dem nicht verwandte Ausgabezeilen entfernt wurden:
$ `which time`-v ls
a.out exception_finder.cpp log.txt
Command being timed:"ls"...Voluntary context switches:1Involuntary context switches:2...Exit status:0
Das funktioniert auf vielen Systemen nicht "out of the box", auch wenn der Befehl verfügbar ist. Können Sie in Ihrer Antwort angeben, wie die Datenerfassung für aktiviert werden soll sar?
Anthon
2
Schreiben Sie das folgende Skript in file ( ctx.sh). Mit sehen ctx.sh <core>Sie alle Prozesse, die auf einem bestimmten Kern ausgeführt werden, und wechselnde NV-Kontext-Schalter werden hervorgehoben. Wenn Sie dies betrachten, werden Sie in der Lage sein, die konkurrierenden Prozesse für den Kern zu identifizieren.
Sehen Sie sich man getrusage an, mit dem Sie die Anzahl der freiwilligen und unfreiwilligen Kontextwechsel abfragen können.
struct rusage {
struct timeval ru_utime;/* user CPU time used */
struct timeval ru_stime;/* system CPU time used */
long ru_maxrss;/* maximum resident set size */
long ru_ixrss;/* integral shared memory size */
long ru_idrss;/* integral unshared data size */
long ru_isrss;/* integral unshared stack size */
long ru_minflt;/* page reclaims (soft page faults)*/
long ru_majflt;/* page faults (hard page faults)*/
long ru_nswap;/* swaps */
long ru_inblock;/* block input operations */
long ru_oublock;/* block output operations */
long ru_msgsnd;/* IPC messages sent */
long ru_msgrcv;/* IPC messages received */
long ru_nsignals;/* signals received */
long ru_nvcsw;/* voluntary context switches */
long ru_nivcsw;/* involuntary context switches */};
Sie können festlegen, dass Informationen pro Thread wie folgt gemeldet werden sollen:
/proc/[pid]/status
Antworten:
Sie können Informationen zu den Kontextschaltern Ihres Prozesses in anzeigen
/proc/<pid>/status
.Führen Sie den Befehl aus, um zu sehen, dass diese Nummern ständig aktualisiert werden
Führen Sie aus, um nur die Zahlen zu erhalten
quelle
pidstat (1) - Berichtsstatistik für Linux-Tasks. Laut ist
man pidstat
es so einfach wie ebenpidstat -w …
quelle
vmstat
,iostat
und andere. Wenn also aktuelle Statistiken benötigt werden, anstattwatch
sie auszuführen, führen Sie sie einfach mit einem Sekundenintervall aus.Um eine Aufzeichnung eines gesamten Prozessablaufs zu erhalten, können Sie das GNU-
time
Dienstprogramm (verwechseln Sie es nicht mit dembash
eingebauten) mit der-v
Option verwenden. Hier ist ein Beispiel, bei dem nicht verwandte Ausgabezeilen entfernt wurden:quelle
Sie können verwenden
sar -w
,. Beispiel:sar -w 1 3
Gibt die Gesamtzahl der Kontextwechsel pro Sekunde für jeweils 1 Sekunde insgesamt dreimal an.quelle
sar
?Schreiben Sie das folgende Skript in file (
ctx.sh
). Mit sehenctx.sh <core>
Sie alle Prozesse, die auf einem bestimmten Kern ausgeführt werden, und wechselnde NV-Kontext-Schalter werden hervorgehoben. Wenn Sie dies betrachten, werden Sie in der Lage sein, die konkurrierenden Prozesse für den Kern zu identifizieren.quelle
Sehen Sie sich man getrusage an, mit dem Sie die Anzahl der freiwilligen und unfreiwilligen Kontextwechsel abfragen können.
Sie können festlegen, dass Informationen pro Thread wie folgt gemeldet werden sollen:
Rufen Sie es einfach zweimal vor und nach Ihrem kritischen Abschnitt auf und prüfen Sie, ob der usage.ru_nivcsw-Wert gestiegen ist oder nicht.
quelle
quelle