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
있는 b
atch 모드 에서 실행할 수 있습니다 . 그러나 여기 에서 설명한 것처럼 첫 번째 반복 반복은 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 번 결과를 얻는다