Я хотел бы отслеживать количество потоков, используемых конкретным процессом в 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