it-swarm.com.de

Wie kann ich die Threadanzahl eines Prozesses unter Linux überwachen?

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?

110
zorro_velcro

versuchen

ps huH p <PID_OF_U_PROCESS> | wc -l

oder htop

136
slav0nic

So ermitteln Sie die Anzahl der Threads für eine bestimmte PID:

$ ps -o nlwp <pid>

Dabei steht nlwp für Anzahl der Lightweight-Prozesse (Threads). Also ps alias nlwp bis thcount, was bedeutet, dass

$ ps -o thcount <pid>

funktioniert auch.

Wenn Sie die Anzahl der Threads überwachen möchten, verwenden Sie einfach watch:

$ watch ps -o thcount <pid>

So ermitteln Sie die Summe aller im System ausgeführten Threads:

$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
46
Thejaswi R

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.

45
bdonlan
cat /proc/<PROCESS_PID>/status | grep Threads
29
PbxMan

ps -eLf auf der Shell zeigt eine Liste aller Threads und Prozesse an, die derzeit auf dem System ausgeführt werden. Oder Sie können den Befehl top ausführen und dann 'H' drücken, um die Thread-Listen umzuschalten.

20
user2045557

Wenn du benutzt:

ps uH p <PID_OF_U_PROCESS> | wc -l

Sie müssen 1 zum Ergebnis subtrahieren, da eine der Zeilen, die "wc" zählt, die Überschriften des "ps" -Befehls sind.

6
flexo

JStack ist recht kostengünstig - eine Möglichkeit 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 Anzahl der Threads für einen bestimmten Prozess anzeigt.

6
rhys keepence

Hier ist ein Befehl, der die Anzahl der Threads eines bestimmten Prozesses anzeigt:

ps -L -o pid= -p <pid> | wc -l

Anders als bei den anderen auf ps basierenden Antworten ist es hier nicht erforderlich, 1 Von der Ausgabe abzuziehen, da dank der Option -o pid= Keine ps -Headerzeile vorhanden ist .

5
jlliagre

$ 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)

[email protected]:~# cat /proc/8443/status
Name:   abcdd
State:  S (sleeping)
Tgid:   8443
VmSwap:        0 kB
Threads:    4
SigQ:   0/256556
SigPnd: 0000000000000000
5
Avinash Reddy

Neuere JDK-Distributionen werden mit JConsole und VisualVM ausgeliefert. Beide Tools sind fantastisch, um die schmutzigen Details eines ausgeführten Java) - Prozesses zu ermitteln. Wenn Sie dies programmgesteuert ausführen müssen, untersuchen Sie JMX.

4
basszero

jvmtop kann die aktuelle Anzahl der JVM-Threads neben anderen Metriken anzeigen.

3
MRalwasser

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 die Speichernutzung anzeigt.

Drücken Sie "Shift + H", um den gesamten Vorgang anzuzeigen, oder drücken Sie erneut, um ihn auszublenden. Drücken Sie "F4", um Ihren Prozessnamen zu suchen.

Installation unter Ubuntu oder Debian:

Sudo apt-get install htop

Installation unter Redhat oder CentOS:

yum install htop
dnf install htop      [On Fedora 22+ releases]

Wenn Sie "htop" aus dem Quellcode kompilieren möchten, finden Sie es hier .

Wenn Sie versuchen, die Anzahl der Threads mit CPU für eine bestimmte PID herauszufinden, würde ich Folgendes verwenden:

top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l
1

Wenn du an solchen Threads interessiert bist, die wirklich aktiv sind - als wenn du etwas tust (nicht blockiert, nicht timed_waiting, nicht meldest "Thread läuft" aber Ich warte wirklich darauf, dass ein Stream Daten liefert, anstatt im Leerlauf zu sitzen, aber zu leben. Dann könnte Sie jstack-active interessieren.

Dieses einfache Bash-Skript führt jstack aus und filtert dann alle Threads heraus, die nach Heuristik im Leerlauf zu sein scheinen. Dabei werden Ihnen Stapelspuren für die Threads angezeigt, die tatsächlich CPU-Zyklen verbrauchen.

0
Partly Cloudy

VisualVM kann eindeutige Status von Threads eines bestimmten JVM-Prozesses anzeigen

enter image description here

0
DiveInto