매번 CPU 사용량이 동일합니다. “Cpu(s)” | awk ‘{print

CPU 사용을 얻기 위해 다음 명령을 실행하면 멋진 + 사용자 CPU 사용이 발생합니다.

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'

산출:

14.5

여기서 문제는 출력이 top 명령에 의존하므로 top 명령으로 즉시 변경되지 않는다는 것입니다. 그래서 나는 즉시 올바른 CPU를 얻지 못했습니다. 동일한 출력을 제공하며 변경되지 않습니다.

출력에서 실시간 cpuusage를 얻고 싶습니다. 내 명령을 개선하도록 도와주세요.



답변

맞습니다 top. 처음 반복 할 때 잘못된 CPU 사용량을 나타내는 것으로 보입니다. 이 문제를 다음과 같이 해결할 수 있습니다.

top -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

이것은 물론 두 배의 시간이 걸리지 만 어쨌든 작동합니다.

그래도 더 빨리 작동하려면 -d옵션 을 사용할 수 있습니다 . 예를 들어 1 초 총 측정 기간 동안 절반을 사용하십시오.

top -d 0.5 -b -n2 | grep "Cpu(s)"|tail -n 1 | awk '{print $2 + $4}'

답변

기술적으로 첫 번째 top가 항상 같은 값을 출력하지는 않습니다. 마지막 부팅 이후 평균 CPU로드 만 출력합니다. 때문에 top용도 델타 /proc/stat잘못된 (그러나 WAD) 결과를 얻었다 제로 대해 비교하면서 CPU 부하를 계산하기 위해 통계 첫번째 값이 계산된다.

을 사용하지 않으려면 top직접 구문 분석 할 수 있습니다 /proc/stat.

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5) "%"}'

이 방법으로 더 빠르고 정확합니다.

당신은 그것을 테스트 할 수 있습니다 stress:

stress -c 1 -q &

그리고 해

killall stress

후.


답변

@Ruslan의 답변을 확장하고 top사용자, 시스템 프로세스 및 nice프로세스 간에 CPU 사용량을 나누기 위해 세 가지 합계를 원합니다. 따라서 출력 모드를 파싱 할 수 top있는 batch 모드 에서 실행할 수 있습니다 . 그러나 여기 에서 설명한 것처럼 첫 번째 반복 반복은 top -b부팅 이후 백분율 을 반환하므로 -n 2현재 백분율을 얻으려면 적어도 두 번의 반복 ( )이 필요합니다 . 작업 속도를 높이기 d위해 반복 간격을 0.01다음과 같이 설정할 수 있습니다 .

top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'

답변

아마 ps출력을 기반으로 이것을 사용하십시오 :

ps aux  | awk 'BEGIN { sum = 0 }  { sum += $3 }; END { print sum }

답변

쉘에서 watch 명령 또는 for 루프를 사용하십시오.

watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"


답변

왜 CPU 사용량에 관심이 있습니까? 로드 평균은 훨씬 더 좋은 지표입니다 :

cat /proc/loadavg

실제로 CPU 사용량이 필요한 경우 구문 분석 /proc/stat이 가장 좋은 방법 일 것입니다.


답변

sar명령 사용

sar 1 10

즉, 매 초마다 10 번 결과를 얻는다