2010-07-27 6 views
80

코어별로 특정 프로세스 CPU 사용량을 측정 할 수있는 방법이 있습니까?프로세스의 CPU 코어 사용량을 어떻게 측정합니까?

top은 코어로 전체 시스템의 CPU 사용량을 측정하는 데 적합하며 taskset은 프로세스가 실행되는 데 허용되는 CPU 코어에 대한 정보를 제공 할 수 있습니다.

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

답변

32

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 

당신이 스레드가 같은 CPU 코어에서 실행되는 것을 볼 수

(때문에 (PSR 스레드가 현재에 할당 된 CPU ID입니다) 자이 썬에서 같은 파이썬 스크립트를 실행 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 코어에 분리되어 있다고보고되거나 후자의 경우 두 스레드가

91

당신은 여전히 ​​

top 형태 1에서이 작업을 수행 할 수 있습니다 .. 동일한 코어에있는 것으로보고 - 각 CPU

제한을 특정 사용자 계정으로 실행하는 특정 프로세스를함으로써 표시되는 프로세스를 보여줍니다 'u'를 입력하여 해당 사용자로 제한하십시오.

+5

정도의 좋은 개요를 제공합니다? – Zhianc

+1

* Irix 모드 * (* Solaris 모드 *와 반대)를 토글하려면 'I'를 누르십시오. 'on' 일 때, 프로세스 목록에 표시된 백분율은 ** CPU 스레드 **에 비례합니다. '사용 안함'으로 설정하면 해당 비율이 ** CPU 전체 용량 ** (즉, * ALL 스레드 * - 일명 모든 코어)에 상대적으로 표시됩니다. –

+3

'htop'도 작동합니다 – phyatt

62

당신은 사용할 수 있습니다

mpstat -P ALL 1 

그것은 각각의 코어 사용량이 얼마나 보여주고 자동으로 매 초마다 업데이트합니다. 이 명령은 특정 프로세스에 대한 CPU 코어 사용량을 표시하지 않습니다 즉, 비록 원래의 질문에 대답하지 않는

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 

: 출력 (쿼드 코어 프로세서)이 같은 것입니다.

+1

이 질문에는 실제로 대답하지 않는다고 생각합니다. 실행중인 다른 프로세스가없는 경우에만 동일한 작업입니다. 또한 이것은 쿼드 코어 CPU 인 것 같지 않습니다. 8 코어 (HT가 활성화 된 쿼드) 일 것입니다. –

+0

HT를 사용할 수있는 쿼드 코어입니다. –

+0

원래 질문에 응답하지 않습니다. 그러나 그것을 언급하지 않기 때문에 (-1) 나에게서. – KGhatak

3

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초을 기반으로합니다.

+0

ps 명령과 동일한 C 시스템 호출 – Bionix1441

+0

C 라이브러리 함수 read() 및 open()을 사용하여/proc/pid/* 및 필요한 데이터를 파싱합니다. – GL2014

0

이 문제가있어서 비슷한 대답을 발견했습니다 here.

이 방법은 top을 원하는대로 설정 한 다음 W (대문자 W)을 누릅니다. 이렇게하면 top의 현재 레이아웃이 $ HOME/.toprc의 구성 파일에 저장됩니다.

다른 구성으로 복수 top을 실행하려는 경우에는 작동하지 않을 수도 있습니다.

그래서를 통해 당신의 주위에 일이

1) 이제 바이너리

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

이름 바꾸기 .../다른 설정 파일에 기록 다음 중 하나를 수행하여 다른 설정 파일을 사용할 수 있습니다 무엇이 고려 .top2rc은 $ 홈에 기록 될 것입니다

2) 일부 대체 경로로 설정합니다 $ 홈, 그것에는 $ HOME/.binary-name.rc 파일의 설정 파일을 작성하기 때문에

HOME=./ 
top 

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

다양한 사용 통계를 사용하여 맨 위에 다양한 사용 통계를 추가하면 해당 정보에 대한 배치 출력을 생성 할 수 있으며 후자는 스크립트를 통해 정보를 통합합니다. 스크립트처럼 간단하지는 않지만 모든 프로세스를 제공하기 위해 맨 위를 찾았으므로 나중에 놓쳤을 수도있는 장기간에 상태를 요약하고 캡처 할 수 있습니다 (길잃은 프로세스로 인해 설명되지 않는 갑작스러운 CPU 사용)

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 또는도 시도해보십시오. 더 많은 분류 된 정보가 표시됩니다.

perf stat의 사용법에 대한 자세한 내용은 perf cpu statistic, perf help stat 옵션의 의미를 이해하는 데 도움이됩니다.

1
dstat -C 0,1,2,3 

또한 처음 4 코어의 CPU 사용량을 알려줍니다. 물론 32 개 코어가있는 경우이 명령어는 좀 더 길어 지지만 몇 개의 코어에만 관심이 있다면 유용합니다.

코어 (3)에서 당신에만 관심이있는 경우 다음 7 예를 들어,

dstat -C 3,7 
2

htop을 할 수있는 내가이 글을 읽을 어떻게 .. 각각의 코어 사용

관련 문제