CPU 사용량 실시간 얻기 -b -n1

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 사용량을 분할하므로이 세 가지의 합이 필요합니다. 마지막으로 grepCPU 백분율을 포함하는 줄을 사용 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인쇄는 해당 시점의 상태에 해당되지 않습니다. 그런 다음 첫 줄을 무시하도록 스크립트를 조정하십시오.