Ich möchte die Anzahl der Threads überwachen, die von einem bestimmten Prozess unter Linux verwendet werden. Gibt es eine einfache Möglichkeit, diese Informationen abzurufen, ohne die Leistung des Prozesses zu beeinträchtigen?
linux
multithreading
monitor
Fließen
quelle
quelle
Antworten:
Versuchen
oder htop
quelle
1
, weil es eine Zeile wieUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
für die Tabellenüberschrift druckt .wc
wenn Sie es gerade könntenps -o thcount <pid>
? Siehe diese Antwort .So ermitteln Sie die Anzahl der Threads für eine bestimmte PID:
Wo
nlwp
steht für Anzahl der Leichtbauprozesse (Fäden) . Alsops
Aliasenlwp
zuthcount
, was bedeutet, dassfunktioniert auch.
Wenn Sie die Threadanzahl überwachen möchten, verwenden Sie einfach
watch
:So erhalten Sie die Summe aller im System ausgeführten Threads:
quelle
watch
Befehl. Beachten Sie jedoch, dass die Verwendungthcount
für einige (Red Hat ...) fehlschlagen kann, obwohl diesnlwp
für mich funktioniert hat.Jeder Thread in einem Prozess erstellt ein Verzeichnis unter
/proc/<pid>/task
. Zählen Sie die Anzahl der Verzeichnisse und Sie haben die Anzahl der Threads.quelle
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
. Ersetzen Sie einfach die <PID> durch Ihre Prozess-ID, die Sie erhaltentop
oder verwenden könnenps
quelle
ps -eLf
Auf der Shell erhalten Sie eine Liste aller Threads und Prozesse, die derzeit auf dem System ausgeführt werden. Oder Sie können dentop
Befehl ausführen und dann 'H' drücken, um die Thread-Listen umzuschalten.quelle
-p
bei Bedarf ein oder etwas anderes hinzuzufügen . Dies ist das Minimum, das Sie benötigen, um die Thread-Liste anzuzeigen.JStack ist recht kostengünstig - eine Option wäre, die Ausgabe durch grep zu leiten, um aktive Threads zu finden, und dann durch wc -l zu leiten.
Grafischer ist JConsole, das die Thread-Anzahl für einen bestimmten Prozess anzeigt.
quelle
Wenn du benutzt:
Sie müssen 1 vom Ergebnis abziehen, da eine der Zeilen, die "wc" zählt, die Überschriften des Befehls "ps" sind.
quelle
ps
als einen der Threads zählen.Hier ist ein Befehl, der die Anzahl der Threads eines bestimmten Prozesses anzeigt:
Im Gegensatz zu den anderen
ps
Antworten besteht hier keine Notwendigkeit,1
von der Ausgabe abzuziehen, daps
dank der-o pid=
Option keine Kopfzeile vorhanden ist .quelle
$ ps H p pid-id
H - Listet alle einzelnen Threads in einem Prozess auf
oder
$cat /proc/pid-id/status
pid-id ist die Prozess-ID
zB .. (Die folgende Ausgabe abgeschnitten)
quelle
Neuere JDK-Distributionen werden mit JConsole und VisualVM geliefert. Beide sind fantastische Tools, um die schmutzigen Details eines laufenden Java-Prozesses abzurufen. Wenn Sie dies programmgesteuert tun müssen, untersuchen Sie JMX.
quelle
jvmtop kann neben anderen Metriken die aktuelle Anzahl der jvm-Threads anzeigen.
quelle
Der einfachste Weg ist die Verwendung von "htop". Sie können "htop" (eine schickere Version von top) installieren, die Ihnen alle Ihre Kerne, Prozesse und Speichernutzung anzeigt.
Drücken Sie "Umschalt + H", um alle Vorgänge anzuzeigen, oder drücken Sie erneut, um sie auszublenden. Drücken Sie die Taste "F4", um Ihren Prozessnamen zu suchen.
Installation unter Ubuntu oder Debian:
Installation unter Redhat oder CentOS:
Wenn Sie "htop" aus dem Quellcode kompilieren möchten, finden Sie es hier .
quelle
Wenn Sie versuchen, die Anzahl der Threads mit CPU für eine bestimmte PID herauszufinden, würde ich verwenden:
quelle
Wenn Sie an solchen Threads interessiert sind, die wirklich aktiv sind - wie etwas zu tun (nicht blockiert, nicht timed_waiting, kein "Thread läuft", sondern wirklich darauf zu warten, dass ein Stream Daten liefert), anstatt im Leerlauf herumzusitzen, aber live - - Dann könnten Sie an jstack-active interessiert sein .
Dieses einfache Bash-Skript wird ausgeführt
jstack
und filtert dann alle Threads heraus, die nach Heuristiken im Leerlauf zu sein scheinen. Es zeigt Ihnen Stapelspuren für die Threads, die tatsächlich CPU-Zyklen verbrauchen.quelle
VisualVM kann eindeutige Status von Threads eines bestimmten JVM-Prozesses anzeigen
quelle
Wenn Sie die Anzahl der Threads pro Benutzer in einem Linux-System möchten, sollten Sie Folgendes verwenden:
wo als den gewünschten Benutzernamen verwenden.
quelle