Как я могу отслеживать количество потоков процесса в Linux?

Я хотел бы отслеживать количество потоков, используемых конкретным процессом в Linux. Есть ли простой способ получить эту информацию, не влияя на производительность процесса?

Ответ 1

попробовать

ps huH p <PID_OF_U_PROCESS> | wc -l

или htop

Ответ 2

Каждый поток процесса создает каталог под /proc/<pid>/task. Подсчитайте количество каталогов, и у вас есть количество потоков.

Ответ 3

cat /proc/<PROCESS_PID>/status | grep Threads

Ответ 4

Чтобы получить количество потоков для заданного pid:

$ ps -o nlwp <pid>

Где nlwp обозначает количество процессов легкого веса (потоков). Таким образом, ps aliases nlwp to thcount, что означает, что

$ ps -o thcount <pid>

также работает.

Если вы хотите контролировать количество потоков, просто используйте watch:

$ watch ps -o thcount <pid>

Чтобы получить сумму всех потоков, запущенных в системе:

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

Ответ 5

ps -eLf в оболочке должен быть представлен список всех потоков и процессов, выполняемых в настоящее время в системе. Или вы можете запустить команду top, а затем нажать "H" для переключения списков потоков.

Ответ 6

JStack довольно недорог - один из вариантов - вывести выходные данные через grep, чтобы найти активные потоки, а затем пропустить через wc -l.

Более графически является JConsole, который отображает количество потоков для данного процесса.

Ответ 7

Если вы используете:

ps uH p <PID_OF_U_PROCESS> | wc -l

Вы должны вычесть 1 в результат, так как одна из строк "wc" подсчитывает заголовки команды "ps".

Ответ 8

Вот одна команда, которая отображает количество потоков данного процесса:

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

В отличие от других ответов ps, здесь нет необходимости вычитать 1 из его вывода, поскольку нет строки заголовка ps благодаря опции -o pid=.

Ответ 9

Новые дистрибутивы JDK поставляются с JConsole и VisualVM. Оба являются фантастическими инструментами для получения грязных деталей из работающего Java-процесса. Если вам нужно сделать это программно, исследуйте JMX.

Ответ 10

jvmtop может показывать текущее количество потоков jvm рядом с другими метриками.

Ответ 11

$ ps H p pid-id

H - список всех отдельных потоков в процессе

или

$cat /proc/pid-id/status

pid-id - это идентификатор процесса

например.. (Усечен нижний вывод)

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

Ответ 12

Если вы пытаетесь выяснить количество потоков, использующих процессор для данного pid, я бы использовал:

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

Ответ 13

Самый простой способ - использовать "htop" . Вы можете установить "htop" (более интересную версию top), которая покажет вам все ваши ядра, процесс и использование памяти.

Нажмите "Shift + H", чтобы отобразить весь процесс, или нажмите еще раз, чтобы скрыть его. Нажмите "F4" для поиска имени процесса.

Установка на Ubuntu или Debian:

sudo apt-get install htop

Установка на Redhat или CentOS:

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

Если вы хотите скомпилировать "htop" из исходного кода, вы найдете здесь здесь.

Ответ 14

Если вы заинтересованы в тех потоках, которые действительно активны - как в том, чтобы что-то делать (не заблокировано, а не timed_waiting, а не сообщать об "потоке", но действительно ждут потока для передачи данных), а не сидеть без дела но жить - тогда вас может заинтересовать jstack-active.

Этот простой bash script работает jstack, затем отфильтровывает все потоки, которые по эвристике кажутся бездействующими, показывая трассировку стека для тех потоков, которые фактически потребляют циклы процессора.

Ответ 15

VisualVM может показывать четкие состояния потоков данного процесса JVM

введите описание изображения здесь