development

리눅스에서 프로세스의 스레드 수를 어떻게 모니터링 할 수 있습니까?

big-blog 2020. 7. 25. 10:12
반응형

리눅스에서 프로세스의 스레드 수를 어떻게 모니터링 할 수 있습니까?


Linux에서 특정 프로세스가 사용하는 스레드 수를 모니터링하고 싶습니다. 프로세스 성능에 영향을주지 않고이 정보를 쉽게 얻을 수있는 방법이 있습니까?


시험

ps huH p <PID_OF_U_PROCESS> | wc -l

또는 멈춤


주어진 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 }'

프로세스의 각 스레드는 아래에 디렉토리를 만듭니다 /proc/<pid>/task. 디렉토리 수를 세면 스레드 수가 있습니다.


cat /proc/<PROCESS_PID>/status | grep Threads

ps -eLf쉘에서 현재 시스템에서 실행중인 모든 스레드와 프로세스의 목록을 제공해야합니다. 또는 topcommand를 실행 한 다음 'H'를 눌러 스레드 목록을 토글 할 수 있습니다 .


JStack은 매우 저렴합니다. 하나의 옵션은 grep을 통해 출력을 파이프하여 활성 스레드를 찾은 다음 wc -l을 통해 파이프하는 것입니다.

보다 그래픽 적으로 주어진 프로세스의 스레드 수를 표시하는 JConsole이 있습니다.


사용하는 경우 :

ps uH p <PID_OF_U_PROCESS> | wc -l

"wc"행 중 하나가 counting "ps"명령의 헤더이므로 결과에서 1을 빼야합니다.


주어진 프로세스의 스레드 수를 표시하는 명령은 다음과 같습니다.

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

다른 ps기반 답변 과 달리 옵션 덕분에 헤더 행 1이 없으므로 출력에서 빼지 않아도됩니다 .ps-o pid=


$ ps H p pid-id

H-프로세스의 모든 개별 스레드를 나열합니다

또는

$cat /proc/pid-id/status

pid-id는 프로세스 ID입니다

예 : (아래 출력 잘라 내기)

root@abc:~# cat /proc/8443/status
Name:   abcdd
State:  S (sleeping)
Tgid:   8443
VmSwap:        0 kB
Threads:    4
SigQ:   0/256556
SigPnd: 0000000000000000

최신 JDK 배포판에는 JConsole 및 VisualVM이 제공됩니다. 둘 다 실행중인 Java 프로세스에서 더러운 세부 정보를 얻는 환상적인 도구입니다. 프로그래밍 방식으로이 작업을 수행해야하는 경우 JMX를 조사하십시오.


jvmtop 은 다른 메트릭 외에도 현재 jvm 스레드 수를 표시 할 수 있습니다.


주어진 pid에 대해 CPU를 사용하여 스레드 수를 찾으려면 다음을 사용하십시오.

top -bc -H -n2 -p <pid> | awk '{if ($9 != "0.0" && $1 ~ /^[0-9]+$/) print $1 }' | sort -u | wc -l

가장 쉬운 방법은 "htop"을 사용하는 것입니다. 모든 코어, 프로세스 및 메모리 사용량을 보여주는 "htop"(보다 멋진 버전의 top)을 설치할 수 있습니다.

"Shift + H"를 눌러 모든 프로세스를 표시하거나 다시 눌러 숨 깁니다. 프로세스 이름을 검색하려면 "F4"키를 누르십시오.

우분투 또는 데비안에 설치하기 :

sudo apt-get install htop

Redhat 또는 CentOS에 설치 :

yum install htop
dnf install htop      [On Fedora 22+ releases]

If you want to compile "htop" from source code, you will find it here.


If you're interested in those threads which are really active -- as in doing something (not blocked, not timed_waiting, not reporting "thread running" but really waiting for a stream to give data) as opposed to sitting around idle but live -- then you might be interested in jstack-active.

This simple bash script runs jstack then filters out all the threads which by heuristics seem to be idling, showing you stack traces for those threads which are actually consuming CPU cycles.


VisualVM can show clear states of threads of a given JVM process

enter image description here

참고URL : https://stackoverflow.com/questions/268680/how-can-i-monitor-the-thread-count-of-a-process-on-linux

반응형