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?


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


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 }'

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.


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


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.


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.


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".


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 .


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

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.



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 .


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

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.



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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.