Как я могу контролировать количество потоков процесса в Linux? - PullRequest
104 голосов
/ 06 ноября 2008

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

Ответы [ 15 ]

135 голосов
/ 07 ноября 2008

1001 * попробовать *

ps huH p <PID_OF_U_PROCESS> | wc -l

или htop

42 голосов
/ 27 августа 2011

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

40 голосов
/ 09 июня 2016

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

$ ps -o nlwp <pid>

Где nlwp обозначает Количество процессов легкого веса (потоков) . Таким образом, ps псевдонимы nlwp до 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 }'
29 голосов
/ 21 апреля 2015
cat /proc/<PROCESS_PID>/status | grep Threads
20 голосов
/ 23 августа 2014

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

6 голосов
/ 27 августа 2011

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

ps uH p <PID_OF_U_PROCESS> | wc -l

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

6 голосов
/ 06 ноября 2008

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

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

5 голосов
/ 16 февраля 2016

$ ps H p pid-id

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

или

$cat /proc/pid-id/status

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

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

root@abc:~# cat /proc/8443/status
Name:   abcdd
State:  S (sleeping)
Tgid:   8443
VmSwap:        0 kB
Threads:    4
SigQ:   0/256556
SigPnd: 0000000000000000
5 голосов
/ 21 января 2014

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

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

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

4 голосов
/ 06 ноября 2008

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

...