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?
linux
multithreading
monitor
Pływ
źródło
źródło
Odpowiedzi:
próbować
lub htop
źródło
1
od tego, ponieważ wypisuje wiersz podobnyUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
do nagłówka tabeli.wc
skoro można po prostups -o thcount <pid>
? Zobacz tę odpowiedź .Aby uzyskać liczbę wątków dla danego pidu:
Gdzie
nlwp
oznacza liczbę lekkich procesów (wątków) . Stądps
aliasynlwp
dothcount
, co oznacza, żedziała również.
Jeśli chcesz monitorować liczbę wątków, po prostu użyj
watch
:Aby uzyskać sumę wszystkich wątków uruchomionych w systemie:
źródło
watch
polecenie. Należy jednak pamiętać, że używaniethcount
może się nie powieść dla niektórych (Red Hat ...), chociażnlwp
działało dla mnie.Każdy wątek w procesie tworzy katalog pod
/proc/<pid>/task
. Policz liczbę katalogów, a masz liczbę wątków.źródło
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
. Po prostu zastąp <PID> swoim identyfikatorem procesu, który możesz uzyskać odtop
lub za pomocąps
źródło
ps -eLf
w powłoce wyświetli listę wszystkich wątków i procesów aktualnie działających w systemie. Lub możesz uruchomićtop
polecenie, a następnie nacisnąć `` H '', aby przełączyć listę wątków.źródło
-p
razie potrzeby łatwo jest dodać do tego znak lub cokolwiek innego. To minimum potrzebne do wyświetlenia listy wątków.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.
źródło
Jeśli użyjesz:
Musisz odjąć 1 do wyniku, ponieważ jeden z liczonych wierszy "wc" to nagłówki polecenia "ps".
źródło
ps
jako jednego z wątków.Oto jedno polecenie, które wyświetla liczbę wątków danego procesu:
W przeciwieństwie do innych
ps
odpowiedzi opartych na tej opcji, nie ma potrzeby odejmowania1
od wyniku, ponieważps
dzięki tej-o pid=
opcji nie ma linii nagłówka .źródło
$ 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)
źródło
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.
źródło
jvmtop może wyświetlać aktualną liczbę wątków jvm obok innych wskaźników.
źródło
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:
Instalowanie na Redhat lub CentOS:
Jeśli chcesz skompilować "htop" z kodu źródłowego, znajdziesz go tutaj .
źródło
Jeśli próbujesz znaleźć liczbę wątków wykorzystujących procesor dla danego pidu, użyłbym:
źródło
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ę,
jstack
a 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.źródło
VisualVM może pokazywać wyraźne stany wątków danego procesu JVM
źródło
Jeśli chcesz liczbę wątków na użytkownika w systemie linux, powinieneś użyć:
gdzie jak użyć żądanej nazwy użytkownika.
źródło