프로세스에 대한 개별 CPU 코어 사용량을 어떻게 측정합니까?


115

코어별로 특정 프로세스 CPU 사용량을 측정하는 방법이 있습니까?

top 이 코어별로 전체 시스템의 CPU 사용량을 측정하는 데 유용하다는 것을 알고 있으며 작업 세트 는 프로세스가 실행될 수있는 CPU 코어에 대한 정보를 제공 할 수 있습니다.

그러나 CPU 코어별로 특정 프로세스의 CPU 사용량을 어떻게 측정합니까?

답변:


139

여전히 top 에서 할 수 있습니다 . top 이 실행되는 동안 키보드에서 '1'을 누르면 코어 당 CPU 사용량이 표시됩니다.

특정 프로세스가 특정 사용자 계정으로 실행되도록하여 표시되는 프로세스를 제한하고 유형 'u'를 사용하여 해당 사용자로 제한합니다.


3
I를 눌러 Irix 모드 로 전환 할 수도 있습니다 ( Solaris 모드 와 반대 ). 때 on비율이 프로세스 목록에 표시하는을 기준으로 CPU 스레드 . 때 off(가) 비율이 상대적으로 표시되는 것을 특징으로, CPU 전체 용량 (즉, 모든 스레드 - 일명 모든 코어).
7heo.tk

8
이것은 단일 프로세스에만 국한된 것이 아니라 여러 코어에 걸쳐 모든 프로세스의 CPU 사용량을 보여줍니다
m_vitaly

우리는 어떻게 인수로 "1"을 전달할 수 top, man페이지 말한다 top -1하지만 불평! 별도의 CPU 사용량이 표시 top -1 -n 1되는 단일 반복을 얻는 것이 좋을 것 top입니다.
quanta

76

당신이 사용할 수있는:

 mpstat -P ALL 1

각 코어가 얼마나 많이 사용되는지 보여주고 매초마다 자동으로 업데이트됩니다. 출력은 다음과 같습니다 (쿼드 코어 프로세서에서).

10:54:41 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
10:54:42 PM  all    8.20    0.12    0.75    0.00    0.00    0.00    0.00    0.00   90.93
10:54:42 PM    0   24.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00   74.00
10:54:42 PM    1   22.00    0.00    2.00    0.00    0.00    0.00    0.00    0.00   76.00
10:54:42 PM    2    2.02    1.01    0.00    0.00    0.00    0.00    0.00    0.00   96.97
10:54:42 PM    3    2.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   98.00
10:54:42 PM    4   14.15    0.00    1.89    0.00    0.00    0.00    0.00    0.00   83.96
10:54:42 PM    5    1.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00   99.00
10:54:42 PM    6    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
10:54:42 PM    7    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00

이 명령은 원래 질문에 대답하지 않습니다. 즉, 특정 프로세스에 대한 CPU 코어 사용량을 표시하지 않습니다.


3
나는 이것이 실제로 질문에 답하지 않는다고 생각합니다. 실행중인 다른 프로세스가없는 경우에만 동일합니다. 또한 이것은 쿼드 코어 CPU가 아닌 8 코어 (HT가 활성화 된 쿼드 일 수 있음)와 비슷합니다.
돼지

1
HT가 활성화 된 쿼드 코어입니다.
Kamran Bigdely

원래 질문에 대답하지 않습니다. 그러나 나 에게서는 (-1) 언급하지 않았습니다.
KGhatak

1
내가 @KGhatak에 동의, 이것은 원래의 질문에 대답하지 않는 -1
jodag

41

사용할 수 있습니다 ps.
예 : 듀얼 코어 CPU에서 두 개의 사용중인 스레드가있는 파이썬 프로세스 :

$ ps -p 29492 -L -o pid,tid,psr,pcpu
  PID   TID PSR %CPU
29492 29492   1  0.0
29492 29493   1 48.7
29492 29494   1 51.9

(PSR은 스레드가 현재 할당 된 CPU ID입니다.)

스레드가 동일한 CPU 코어에서 실행되고 있음을 알 수 있습니다 (GIL 때문에).

자이 썬에서 동일한 파이썬 스크립트를 실행하면 스크립트가 두 코어를 모두 사용하고 있음을 알 수 있습니다 (그리고 거의 유휴 상태 인 다른 많은 서비스 또는 스레드가 있음).

$ ps -p 28671 -L -o pid,tid,psr,pcpu
  PID   TID PSR %CPU
28671 28671   1  0.0
28671 28672   0  4.4
28671 28673   0  0.6
28671 28674   0  0.5
28671 28675   0  2.3
28671 28676   0  0.0
28671 28677   1  0.0
28671 28678   1  0.0
28671 28679   0  4.6
28671 28680   0  4.4
28671 28681   1  0.0
28671 28682   1  0.0
28671 28721   1  0.0
28671 28729   0 88.6
28671 28730   1 88.5

출력을 처리하고 각 CPU 코어의 총 CPU를 계산할 수 있습니다.

안타깝게도이 접근 방식은 100 % 신뢰할 수없는 것 같습니다. 때로는 첫 번째 경우 두 작업 스레드가 각 CPU 코어로 분리 된 것으로보고되거나 후자의 경우 두 스레드가 켜져있는 것으로보고됩니다. 같은 코어 ..


13

htop 개별 코어 사용에 대한 멋진 개요를 제공합니다.


4

ps솔루션은 내가 필요했던 거의 무엇을 원래의 질문을 요청 정확히 무엇을 던져 일부 bash는 함께 : 코어 당 특정 프로세스의 사용보고

이것은 멀티 스레드 프로세스 의 코어 당 사용량도 보여줍니다 .

다음과 같이 사용하십시오. cpustat`pgrep processname``pgrep otherprocessname` ...

#!/bin/bash

pids=()
while [ $# != 0 ]; do
        pids=("${pids[@]}" "$1")
        shift
done

if [ -z "${pids[0]}" ]; then
        echo "Usage: $0 <pid1> [pid2] ..."
        exit 1
fi

for pid in "${pids[@]}"; do
        if [ ! -e /proc/$pid ]; then
                echo "Error: pid $pid doesn't exist"
                exit 1
        fi
done

while [ true ]; do
        echo -e "\033[H\033[J"
        for pid in "${pids[@]}"; do
                ps -p $pid -L -o pid,tid,psr,pcpu,comm=
        done
        sleep 1
done

참고 : 이러한 통계는 마지막 X 초가 아닌 프로세스 수명을 기반으로 하므로 카운터를 재설정하려면 프로세스를 다시 시작해야합니다.


C lib 함수 read () 및 open ()을 사용하여 / proc / pid / *에서 의사 파일을 열고 필요한 데이터를 구문 분석 할 수 있습니다.
GL2014

2
dstat -C 0,1,2,3 

또한 처음 4 개 코어의 CPU 사용량을 제공합니다. 물론 32 개의 코어가있는 경우이 명령은 조금 더 길지만 몇 개의 코어에만 관심이있는 경우 유용합니다.

예를 들어 코어 3과 7에만 관심이 있다면 다음을 수행 할 수 있습니다.

dstat -C 3,7

이것이 단일 프로세스와 어떤 관련이 있습니까?
einpoklum

1

이 문제가 있었는데 여기서 비슷한 답을 찾았 습니다 .

방법은 top원하는 방식 으로 설정 한 다음 W(대문자 W) 를 누르는 것 입니다. 이것은 top의 현재 레이아웃을 $ HOME / .toprc의 구성 파일에 저장합니다.

top다른 구성으로 여러 개의을 실행하려는 경우 작동하지 않을 수 있습니다.

따라서 내가 생각하는 작업을 통해 다음 중 하나를 수행하여 다른 구성 파일에 쓰기 / 다른 구성 파일을 사용할 수 있습니다.

1) 바이너리 이름 바꾸기

  ln -s /usr/bin/top top2
  ./top2

이제 .top2rc$ HOME에 기록됩니다.

2) $ HOME / .binary-name.rc 파일에 구성 파일을 기록하므로 $ HOME을 다른 경로로 설정하십시오.

HOME=./
top

이제 .toprc현재 폴더에 기록됩니다.

다른 사람들의 주석을 사용하여 다양한 사용량 계정을 맨 위에 추가하면 해당 정보에 대한 배치 출력을 만들 수 있으며 후자는 스크립트를 통해 정보를 통합합니다. 스크립트만큼 간단하지는 않지만 나중에 놓쳤을 수도있는 상태를 나중에 요약하고 캡처 할 수 있도록 모든 프로세스를 제공하기 위해 top을 찾았습니다.


1

나는 perf stat당신이 필요 하다고 생각했습니다 .

--cpu=list옵션 을 지정할 때 프로세스의 특정 사용법을 보여줍니다 . 다음은 perf stat --cpu=0-7 --no-aggr -- make all -j명령을 사용하여 프로젝트를 빌드하는 CPU 사용량을 모니터링하는 예입니다 . 출력은 다음과 같습니다.

CPU0         119254.719293 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU1         119254.724776 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU2         119254.724179 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU3         119254.720833 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU4         119254.714109 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU5         119254.727721 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU6         119254.723447 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU7         119254.722418 task-clock (msec)         #    1.000 CPUs utilized            (100.00%)
CPU0                 8,108 context-switches          #    0.068 K/sec                    (100.00%)
CPU1                26,494 context-switches                                              (100.00%)
CPU2                10,193 context-switches                                              (100.00%)
CPU3                12,298 context-switches                                              (100.00%)
CPU4                16,179 context-switches                                              (100.00%)
CPU5                57,389 context-switches                                              (100.00%)
CPU6                 8,485 context-switches                                              (100.00%)
CPU7                10,845 context-switches                                              (100.00%)
CPU0                   167 cpu-migrations            #    0.001 K/sec                    (100.00%)
CPU1                    80 cpu-migrations                                                (100.00%)
CPU2                   165 cpu-migrations                                                (100.00%)
CPU3                   139 cpu-migrations                                                (100.00%)
CPU4                   136 cpu-migrations                                                (100.00%)
CPU5                   175 cpu-migrations                                                (100.00%)
CPU6                   256 cpu-migrations                                                (100.00%)
CPU7                   195 cpu-migrations                                                (100.00%)

왼쪽 열은 특정 CPU 인덱스이고 가장 오른쪽 열은 CPU 사용량입니다. --no-aggr옵션을 지정하지 않으면 결과가 함께 집계됩니다. 이 --pid=pid옵션은 실행중인 프로세스를 모니터링하려는 경우 도움이됩니다.

더 많은 기밀 정보를 제공하는 -a --per-core또는 -a perf-socket너무 시도 하십시오.

의 사용법에 대한 자세한 내용 perf stat은이 자습서에서 볼 수 있습니다. perf cpu statisticperf help stat 은 옵션의 의미 에도 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.