코어별로 특정 프로세스 CPU 사용량을 측정 할 수있는 방법이 있습니까?프로세스의 CPU 코어 사용량을 어떻게 측정합니까?
top은 코어로 전체 시스템의 CPU 사용량을 측정하는 데 적합하며 taskset은 프로세스가 실행되는 데 허용되는 CPU 코어에 대한 정보를 제공 할 수 있습니다.
그러나 CPU 코어별로 특정 프로세스의 CPU 사용량을 어떻게 측정합니까?
코어별로 특정 프로세스 CPU 사용량을 측정 할 수있는 방법이 있습니까?프로세스의 CPU 코어 사용량을 어떻게 측정합니까?
top은 코어로 전체 시스템의 CPU 사용량을 측정하는 데 적합하며 taskset은 프로세스가 실행되는 데 허용되는 CPU 코어에 대한 정보를 제공 할 수 있습니다.
그러나 CPU 코어별로 특정 프로세스의 CPU 사용량을 어떻게 측정합니까?
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 코어에 분리되어 있다고보고되거나 후자의 경우 두 스레드가
당신은 여전히
top 형태 1에서이 작업을 수행 할 수 있습니다 .. 동일한 코어에있는 것으로보고 - 각 CPU제한을 특정 사용자 계정으로 실행하는 특정 프로세스를함으로써 표시되는 프로세스를 보여줍니다 'u'를 입력하여 해당 사용자로 제한하십시오.
당신은 사용할 수 있습니다
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
: 출력 (쿼드 코어 프로세서)이 같은 것입니다.
이 질문에는 실제로 대답하지 않는다고 생각합니다. 실행중인 다른 프로세스가없는 경우에만 동일한 작업입니다. 또한 이것은 쿼드 코어 CPU 인 것 같지 않습니다. 8 코어 (HT가 활성화 된 쿼드) 일 것입니다. –
HT를 사용할 수있는 쿼드 코어입니다. –
원래 질문에 응답하지 않습니다. 그러나 그것을 언급하지 않기 때문에 (-1) 나에게서. – KGhatak
는 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초을 기반으로합니다.
ps 명령과 동일한 C 시스템 호출 – Bionix1441
C 라이브러리 함수 read() 및 open()을 사용하여/proc/pid/* 및 필요한 데이터를 파싱합니다. – GL2014
이 문제가있어서 비슷한 대답을 발견했습니다 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 사용)
나는 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
옵션의 의미를 이해하는 데 도움이됩니다.
dstat -C 0,1,2,3
또한 처음 4 코어의 CPU 사용량을 알려줍니다. 물론 32 개 코어가있는 경우이 명령어는 좀 더 길어 지지만 몇 개의 코어에만 관심이 있다면 유용합니다.
코어 (3)에서 당신에만 관심이있는 경우 다음 7 예를 들어,
dstat -C 3,7
htop
을 할 수있는 내가이 글을 읽을 어떻게 .. 각각의 코어 사용
정도의 좋은 개요를 제공합니다? – Zhianc
* Irix 모드 * (* Solaris 모드 *와 반대)를 토글하려면 'I'를 누르십시오. 'on' 일 때, 프로세스 목록에 표시된 백분율은 ** CPU 스레드 **에 비례합니다. '사용 안함'으로 설정하면 해당 비율이 ** CPU 전체 용량 ** (즉, * ALL 스레드 * - 일명 모든 코어)에 상대적으로 표시됩니다. –
'htop'도 작동합니다 – phyatt