CPU 사용량을 얻기 위해 다음 명령을 실행하면 벌금 + 사용자 CPU 사용량이 표시됩니다.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
산출:
14.5
여기서 내가 겪고 있는 문제는 출력이 top 명령에 따라 달라지므로 top 명령처럼 즉시 변경되지 않는다는 것입니다. 그래서 바로 올바른 CPU를 얻지 못합니다. 동일한 출력을 제공하며 변경되지 않습니다.
출력에서 실시간 CPU 사용량을 얻고 싶습니다. 제 지휘 능력을 향상시킬 수 있도록 도와주세요.
답변1
당신 말이 맞습니다. 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}'
답변2
기술적으로 첫 번째 값은 top
항상 동일한 값을 출력하지 않으며 마지막 부팅 이후 평균 CPU 로드만 출력합니다. top
통계의 증가는 CPU 로드를 계산하는 데 사용되므로 0 /proc/stat
과 비교할 때 첫 번째 값이 계산되어 잘못된(WAD) 결과가 생성됩니다.
사용하고 싶지 않다면 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
뒤쪽에.
답변3
@Ruslan의 답변을 확장하여 top
CPU 사용량을 사용자, 시스템 프로세스 및 nice
프로세스로 나누려면 세 가지의 합계가 필요합니다. 따라서 우리 는 출력을 구문 분석할 수 있는 catch 모드 top
에서 실행할 수 있습니다. b
그러나 설명했듯이여기, 첫 번째 반복은 시작 이후 백분율을 반환하므로 현재 백분율을 얻으려면 top -b
최소한 두 번의 반복( )이 필요합니다 . -n 2
작업 속도를 높이려면 d
반복 간 지연을 다음과 같이 설정할 수 있습니다 0.01
.
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
답변4
watch 명령을 사용하거나 쉘에서 for 루프를 사용하십시오.
즉watch -n1 "top -b -n1 | grep 'Cpu(s)' | awk '{print \$2 + \$4}'"