CPU 사용을 얻기 위해 다음 명령을 실행하면 좋은 + 사용자 CPU 사용이 발생합니다.
top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}'
산출:
14.5
여기서 문제는 출력이 top 명령에 의존하므로 top 명령으로 즉시 변경되지 않는다는 것입니다. 그래서 나는 즉시 올바른 CPU를 얻지 못했습니다. 동일한 출력을 제공하며 변경되지 않습니다.
출력에서 실시간 CPU 사용량을 얻고 싶습니다. 내 명령을 개선하도록 도와주세요.
답변
1 초 지연 될 수 있으면 CPU 사용량이 간단한 백분율로 인쇄됩니다.
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
1 초 지연없이 vmstat
부팅 이후 평균값 만 인쇄 할 수 있습니다.
답변
이 알려진 문제입니다 top
. 여기 에서 설명했듯이 , 첫 번째 반복은 top -b
부팅 이후 백분율 을 반환하므로 -n 2
현재 백분율을 얻으려면 적어도 두 번의 반복 ( )이 필요합니다 . 속도를 높이기 d
위해 반복 간격을로 설정할 수 있습니다 0.01
. top
사용자, 시스템 프로세스 및 nice
프로세스 간에 CPU 사용량을 분할하므로이 세 가지의 합이 필요합니다. 마지막으로 grep
CPU 백분율을 포함하는 줄을 사용 gawk
하여 사용자, 시스템 및 멋진 프로세스를 합산 하는 데 사용 합니다.
top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
----- ------ ----------- --------- ----------------------
| | | | |------> add the values
| | | |--> keep only the 2nd iteration
| | |----------------> keep only the CPU use lines
| |----------------------------> set the delay between runs
|-----------------------------------> run twice in batch mode
답변
나는 여러 가지 방법을 시도했지만 이것이 가장 정확한 것 같습니다.
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)}'
여기서 부터
답변
사용하십시오 -n2
. 두 줄이 출력됩니다. 첫 번째 시간 top
인쇄는 해당 시점의 상태에 해당되지 않습니다. 그런 다음 첫 줄을 무시하도록 스크립트를 조정하십시오.