Я хотел бы отслеживать количество потоков, используемых конкретным процессом в Linux. Есть ли простой способ получить эту информацию, не влияя на производительность процесса?
linux
multithreading
monitor
поток
источник
источник
Ответы:
пытаться
или htop
источник
1
из него, потому что он печатает строку, какUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
заголовок таблицы.wc
когда можно было простоps -o thcount <pid>
? Смотрите этот ответ .Чтобы получить количество потоков для данного pid:
Где
nlwp
означает количество облегченных процессов (потоков) . Таким образомps
псевдонимыnlwp
, чтобыthcount
, что означает , чтотоже работает.
Если вы хотите отслеживать количество потоков, просто используйте
watch
:Чтобы получить сумму всех потоков, запущенных в системе:
источник
watch
команда. Однако обратите внимание, что использованиеthcount
может не работать для некоторых (Red Hat ...), хотяnlwp
у меня работало.Каждый поток в процессе создает каталог в
/proc/<pid>/task
. Подсчитайте количество каталогов, и у вас будет количество потоков.источник
find /proc/<PID>/task -maxdepth 1 -type d -print | wc -l
. Просто замените <PID> идентификатором вашего процесса, который вы можете получитьtop
или использоватьps
источник
ps -eLf
в оболочке должен предоставить вам список всех потоков и процессов, запущенных в настоящее время в системе. Или вы можете запуститьtop
команду и нажать «H», чтобы переключить списки цепочек.источник
-p
к этому легко добавить или что-нибудь еще. Это минимум, который вам нужен, чтобы увидеть список потоков.JStack довольно недорогой - один из вариантов - направить вывод через grep для поиска активных потоков, а затем через wc -l.
Более наглядно - это JConsole, которая отображает количество потоков для данного процесса.
источник
Если вы используете:
Вы должны вычесть 1 из результата, так как одна из строк «wc» считается заголовками команды «ps».
источник
ps
одной из потоков.Вот одна команда, которая отображает количество потоков данного процесса:
В отличие от других
ps
основанных ответов, здесь нет необходимости вычитать1
из его вывода, так как нет опцииps
заголовка благодаря-o pid=
опции.источник
$ ps H p pid-id
H - список всех отдельных потоков в процессе
или
$cat /proc/pid-id/status
pid-id - это идентификатор процесса
например .. (Усеченный вывод ниже)
источник
Новые дистрибутивы JDK поставляются с JConsole и VisualVM. Оба являются фантастическими инструментами для извлечения грязных деталей из запущенного Java-процесса. Если вам нужно сделать это программно, изучите JMX.
источник
jvmtop может показывать текущее количество потоков jvm рядом с другими показателями.
источник
Самый простой способ - использовать "htop". Вы можете установить «htop» (причудливую версию top), которая покажет вам все ваши ядра, процессы и использование памяти.
Нажмите «Shift + H», чтобы показать весь процесс, или нажмите еще раз, чтобы скрыть его. Нажмите клавишу «F4» для поиска имени процесса.
Установка на Ubuntu или Debian:
Установка на Redhat или CentOS:
Если вы хотите скомпилировать "htop" из исходного кода, вы найдете его здесь .
источник
Если вы пытаетесь узнать количество потоков, использующих процессор для данного pid, я бы использовал:
источник
Если вам интересны те потоки, которые действительно активны - например, что-то делают (не заблокированы, не timed_waiting, не сообщают о «потоке запущен», а действительно ожидают поток данных), а не сидят без дела, а живут - - тогда вас может заинтересовать jstack-active .
Этот простой сценарий bash запускается, а
jstack
затем фильтрует все потоки, которые по эвристике кажутся простаивающими, показывая вам трассировки стека для тех потоков, которые фактически потребляют циклы ЦП.источник
VisualVM может показывать четкие состояния потоков данного процесса JVM
источник
Если вам нужно количество потоков на пользователя в системе Linux, вы должны использовать:
где как использовать желаемое имя пользователя.
источник