Как я могу отслеживать количество потоков процесса в 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 – это идентификатор процесса

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

root@abc:~# 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

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

Оцените статью
TechArks.Ru
Добавить комментарий