Відповіді:
1
від нього, оскільки він друкує рядок, як USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
для заголовка таблиці.
Щоб отримати кількість потоків для заданого підпису:
$ 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 }'
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, який відображає кількість потоків для заданого процесу.
Якщо ви використовуєте:
ps uH p <PID_OF_U_PROCESS> | wc -l
Ви повинні відняти 1 до результату, оскільки один з рядків "wc" рахує - це заголовки команди "ps".
ps
одним із потоків.
$ 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
jvmtop може показувати поточну кількість потоків jvm поруч з іншими показниками.
Найпростіший спосіб - це використання "htop". Ви можете встановити "htop" (більш приваблива версія верху), яка покаже вам всі ваші ядра, процес та використання пам'яті.
Натисніть "Shift + H", щоб показати весь процес, або натисніть ще раз, щоб приховати його. Натисніть клавішу "F4" для пошуку назви процесу.
Встановлення на Ubuntu або Debian:
sudo apt-get install htop
Встановлення на Redhat або CentOS:
yum install htop
dnf install htop [On Fedora 22+ releases]
Якщо ви хочете скласти "htop" з вихідного коду, ви знайдете його тут .
Якщо ви намагаєтеся дізнатись кількість потоків, що використовують процесор для даного підпису, я б використав:
top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l
Якщо вас цікавлять ті потоки, які є дійсно активними - як робити щось (не заблоковано, не timed_waiting, не повідомляти про "потоку потоку", але дійсно чекати, щоб потік дав дані) на відміну від того, щоб сидіти навколо простою, але жити - - тоді вас можуть зацікавити jstack-active .
Цей простий скрипт bash запускає jstack
тоді фільтри всіх потоків, які за евристикою здаються простоюючими, показуючи, що ви стежите стеки для тих потоків, які фактично вимагають циклів процесора.
Якщо ви хочете кількість потоків на користувача в системі Linux, то вам слід використовувати:
ps -eLf | grep <USER> | awk '{ num += $6 } END { print num }'
де як використовувати потрібне ім’я користувача.