Jak mogę monitorować liczbę wątków procesu w systemie Linux?

135

Chciałbym monitorować liczbę wątków używanych przez określony proces w systemie Linux. Czy istnieje łatwy sposób na uzyskanie tych informacji bez wpływu na wydajność procesu?

Pływ
źródło
Co powiesz na to, że proces aplikacji działa tylko przez krótki czas? (Powiedz 2 sekundy.)
user2023370

Odpowiedzi:

152

próbować

ps huH p <PID_OF_U_PROCESS> | wc -l

lub htop

slav0nic
źródło
3
Uważam, że powinieneś odjąć 1od tego, ponieważ wypisuje wiersz podobny USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDdo nagłówka tabeli.
AhmetB - Google
2
Litera „h” ukrywa nagłówek.
thinkmassive
11
-1 Po co potokować wyjście, wcskoro można po prostu ps -o thcount <pid>? Zobacz tę odpowiedź .
Flow
73

Aby uzyskać liczbę wątków dla danego pidu:

$ ps -o nlwp <pid>

Gdzie nlwpoznacza liczbę lekkich procesów (wątków) . Stąd psaliasy nlwpdo thcount, co oznacza, że

$ ps -o thcount <pid>

działa również.

Jeśli chcesz monitorować liczbę wątków, po prostu użyj watch:

$ watch ps -o thcount <pid>

Aby uzyskać sumę wszystkich wątków uruchomionych w systemie:

$ ps -eo nlwp | tail -n +2 | awk '{ num_threads += $1 } END { print num_threads }'
Thejaswi R
źródło
2
Najbardziej przydatna odpowiedź tutaj. Zwłaszcza watchpolecenie. Należy jednak pamiętać, że używanie thcountmoże się nie powieść dla niektórych (Red Hat ...), chociaż nlwpdziałało dla mnie.
Joshua Detwiler,
50

Każdy wątek w procesie tworzy katalog pod /proc/<pid>/task. Policz liczbę katalogów, a masz liczbę wątków.

bdonlan
źródło
1
Aby dodać do powyższego komentarza. Można użyć tego polecenia, aby znaleźć liczbę wątków: find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l. Po prostu zastąp <PID> swoim identyfikatorem procesu, który możesz uzyskać od toplub za pomocąps
Navigatron
33
cat /proc/<PROCESS_PID>/status | grep Threads
PbxMan
źródło
21

ps -eLfw powłoce wyświetli listę wszystkich wątków i procesów aktualnie działających w systemie. Lub możesz uruchomić toppolecenie, a następnie nacisnąć `` H '', aby przełączyć listę wątków.


źródło
To jest sos dla mnie. Nie chcę ograniczać się tylko do jednego procesu. W -prazie potrzeby łatwo jest dodać do tego znak lub cokolwiek innego. To minimum potrzebne do wyświetlenia listy wątków.
Erick Robertson,
6

JStack jest dość niedrogi - jedną z opcji byłoby przepuszczenie wyjścia przez grep w celu znalezienia aktywnych wątków, a następnie potokowanie przez wc -l.

Bardziej graficznie jest JConsole, który wyświetla liczbę wątków dla danego procesu.

rhys keepence
źródło
6

Jeśli użyjesz:

ps uH p <PID_OF_U_PROCESS> | wc -l

Musisz odjąć 1 do wyniku, ponieważ jeden z liczonych wierszy "wc" to nagłówki polecenia "ps".

flekso
źródło
Witamy w StackOverflow. Zapewne powinien to być komentarz do odpowiedzi autorstwa slav0nic. Jednak, jak rozumiem, kiedy po raz pierwszy dołączasz do SO, (nadal) nie możesz komentować odpowiedzi, dopóki nie zdobędziesz pewnej reputacji, więc dodanie odpowiedzi to wszystko, co możesz zrobić. Masz rację; nie powinieneś traktować linii nagłówka psjako jednego z wątków.
Jonathan Leffler
6

Oto jedno polecenie, które wyświetla liczbę wątków danego procesu:

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

W przeciwieństwie do innych psodpowiedzi opartych na tej opcji, nie ma potrzeby odejmowania 1od wyniku, ponieważ psdzięki tej -o pid=opcji nie ma linii nagłówka .

jlliagre
źródło
5

$ ps H p pid-id

H - wyświetla listę wszystkich pojedynczych wątków w procesie

lub

$cat /proc/pid-id/status

pid-id to identyfikator procesu

np. (obcięto poniższe dane wyjściowe)

root@abc:~# cat /proc/8443/status
Name:   abcdd
State:  S (sleeping)
Tgid:   8443
VmSwap:        0 kB
Threads:    4
SigQ:   0/256556
SigPnd: 0000000000000000
Avinash Reddy
źródło
4

Nowsze dystrybucje JDK są dostarczane z JConsole i VisualVM. Oba są fantastycznymi narzędziami do uzyskiwania brudnych szczegółów z uruchomionego procesu Java. Jeśli musisz to zrobić programowo, zbadaj JMX.

basszero
źródło
2

jvmtop może wyświetlać aktualną liczbę wątków jvm obok innych wskaźników.

MRalwasser
źródło
2

Najłatwiejszym sposobem jest użycie "htop". Możesz zainstalować "htop" (bardziej wyszukaną wersję topu), który pokaże ci wszystkie rdzenie, proces i zużycie pamięci.

Naciśnij „Shift + H”, aby wyświetlić cały proces lub naciśnij ponownie, aby go ukryć. Naciśnij klawisz "F4", aby wyszukać nazwę procesu.

Instalacja w systemie Ubuntu lub Debian:

sudo apt-get install htop

Instalowanie na Redhat lub CentOS:

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

Jeśli chcesz skompilować "htop" z kodu źródłowego, znajdziesz go tutaj .

Saeed Zahedian Abroodi
źródło
1

Jeśli próbujesz znaleźć liczbę wątków wykorzystujących procesor dla danego pidu, użyłbym:

top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l
Manuel Mndza Bañs
źródło
0

Jeśli interesują Cię te wątki, które są naprawdę aktywne - na przykład podczas robienia czegoś (nie blokowane, nie w oczekiwaniu na czas, nie zgłaszające „uruchomionego wątku”, ale naprawdę czekające na przekazanie danych przez strumień), w przeciwieństwie do siedzenia w bezczynności, ale na żywo - - wtedy możesz być zainteresowany jstack-active .

Ten prosty skrypt bash uruchamia się, jstacka następnie odfiltrowuje wszystkie wątki, które według heurystyki wydają się być bezczynne, pokazując ślady stosu dla tych wątków, które w rzeczywistości zużywają cykle procesora.

Częściowe zachmurzenie
źródło
0

VisualVM może pokazywać wyraźne stany wątków danego procesu JVM

wprowadź opis obrazu tutaj

Nurkować w
źródło
1
samoobijanie się? cholera!
Andrew Scott Evans
0

Jeśli chcesz liczbę wątków na użytkownika w systemie linux, powinieneś użyć:

ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'

gdzie jak użyć żądanej nazwy użytkownika.

Andreas Foteas
źródło