Gibt es eine Möglichkeit, die CPU-Auslastung eines bestimmten Prozesses anhand von Kernen zu messen?
Ich weiß, dass top gut ist, um die CPU-Auslastung des gesamten Systems anhand von Kernen zu messen , und das Task-Set kann Informationen darüber liefern, auf welchem CPU-Kern der Prozess ausgeführt werden darf.
Aber wie messe ich die CPU-Auslastung eines bestimmten Prozesses anhand der CPU-Kerne?
I
um den Irix-Modus umzuschalten (im Gegensatz zum Solaris-Modus ). Wennon
, ist der in der Prozessliste angezeigte Prozentsatz relativ zu einem CPU-Thread . Wennoff
, wird der Prozentsatz relativ zur CPU-Gesamtkapazität angezeigt (dh ALLE Threads - auch bekannt als alle Kerne).top
,man
sagt Seite,top -1
aber es beschwert sich! Es wäre schöntop -1 -n 1
, eine einzelne Iteration zu erhaltentop
, bei der jedoch eine separate CPU-Auslastung angezeigt wird.Sie können verwenden:
Es zeigt an, wie viel jeder Kern beschäftigt ist, und es wird automatisch jede Sekunde aktualisiert. Die Ausgabe wäre ungefähr so (auf einem Quad-Core-Prozessor):
Dieser Befehl beantwortet jedoch nicht die ursprüngliche Frage, dh er zeigt nicht die CPU-Kernauslastung für einen bestimmten Prozess an.
quelle
Sie können verwenden
ps
.zB mit Python-Prozess mit zwei ausgelasteten Threads auf Dual-Core-CPU:
(PSR ist die CPU-ID, der der Thread derzeit zugewiesen ist.)
Sie sehen, dass die Threads auf demselben CPU-Kern laufen (wegen GIL)
Wenn wir dasselbe Python-Skript in Jython ausführen, sehen wir, dass das Skript beide Kerne verwendet (und es gibt viele andere Dienste oder andere Threads, die fast inaktiv sind):
Sie können die Ausgabe verarbeiten und die Gesamt-CPU für jeden CPU-Kern berechnen.
Leider scheint dieser Ansatz nicht 100% zuverlässig zu sein. Manchmal sehe ich, dass im ersten Fall die beiden Arbeitsthreads von jedem CPU-Kern getrennt sind, oder im letzteren Fall, dass die beiden Threads eingeschaltet sind der gleiche Kern ..
quelle
htop
gibt einen schönen Überblick über die individuelle Kernnutzungquelle
Die
ps
Lösung war fast das, was ich brauchte, und mit einigem Bash wird genau das getan, was die ursprüngliche Frage verlangte: die Nutzung bestimmter Prozesse pro Kern zu sehenDies zeigt auch die Verwendung von Multithread- Prozessen pro Kern .
Verwenden Sie wie: cpustat `pgrep processname`` pgrep otherprocessname` ...
Hinweis: Diese Statistiken werden auf Basis von Prozess Lebensdauer , nicht die letzten X Sekunden, so dass Sie Ihren Prozess neu starten müssen , um den Zähler zurückzusetzen.
quelle
Gibt Ihnen auch die CPU-Auslastung der ersten 4 Kerne. Wenn Sie 32 Kerne haben, wird dieser Befehl natürlich etwas länger, ist aber nützlich, wenn Sie nur an wenigen Kernen interessiert sind.
Wenn Sie sich beispielsweise nur für Kern 3 und 7 interessieren, können Sie dies tun
quelle
Ich hatte gerade dieses Problem und ich fand eine ähnliche Antwort hier .
Die Methode besteht darin,
top
die gewünschte Einstellung festzulegen und dannW
(Großbuchstabe W) zu drücken . Dadurch wirdtop
das aktuelle Layout in einer Konfigurationsdatei in $ HOME / .toprc gespeichertDies funktioniert möglicherweise nicht, wenn Sie mehrere
top
mit unterschiedlichen Konfigurationen ausführen möchten .Über eine meiner Meinung nach umgehende Lösung können Sie in verschiedene Konfigurationsdateien schreiben / verschiedene Konfigurationsdateien verwenden, indem Sie eine der folgenden Aktionen ausführen ...
1) Benennen Sie die Binärdatei um
Jetzt
.top2rc
wird in Ihr $ HOME geschrieben2) Setzen Sie $ HOME auf einen alternativen Pfad, da die Konfigurationsdatei in die Datei $ HOME / .binary-name.rc geschrieben wird
Jetzt
.toprc
wird in den aktuellen Ordner geschrieben.Durch die Verwendung von Kommentaren anderer Personen zum Hinzufügen der verschiedenen Verwendungsabrechnungen oben können Sie eine Stapelausgabe für diese Informationen erstellen, wobei letztere die Informationen über ein Skript zusammenführt. Vielleicht nicht ganz so einfach wie Ihr Skript, aber ich fand top, um mir ALLE Prozesse bereitzustellen, damit ich später einen Zustand auf lange Sicht rekapitulieren und erfassen kann, den ich sonst möglicherweise übersehen hätte (unerklärliche plötzliche CPU-Auslastung aufgrund von Streuprozessen).
quelle
Ich dachte, das
perf stat
ist was du brauchst.Es zeigt eine bestimmte Verwendung eines Prozesses, wenn Sie eine
--cpu=list
Option angeben . Hier ist ein Beispiel für die Überwachung der CPU-Nutzung beim Erstellen eines Projekts mithilfe einesperf stat --cpu=0-7 --no-aggr -- make all -j
Befehls. Die Ausgabe ist:Die linke Spalte ist der spezifische CPU-Index und die rechte Spalte ist die Nutzung der CPU. Wenn Sie die
--no-aggr
Option nicht angeben , wird das Ergebnis zusammengefasst. Die--pid=pid
Option ist hilfreich, wenn Sie einen laufenden Prozess überwachen möchten.Versuchen Sie es
-a --per-core
oder-a perf-socket
auch, wodurch mehr Verschlusssachen angezeigt werden.Mehr über die Nutzung von
perf stat
in diesem Tutorial sehen: Statistik perf cpu , auchperf help stat
auf die Bedeutung der Optionen helfen.quelle