CPU 사용량 실시간 얻기


11

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

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

산출:

14.5

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

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


실시간 모니터링 askubuntu.com/questions/293426/…
Qasim

이 간단한 bash는 스크립트는 않습니다 단지 : askubuntu.com/a/450136/243213
크레이그 밴 퇴 네르

답변:


20

1 초 지연 될 수 있으면 CPU 사용량이 간단한 백분율로 인쇄됩니다.

echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]

1 초 지연없이 vmstat부팅 이후 평균값 만 인쇄 할 수 있습니다.


정확한 % (htop과 비교)를 제공하지 않습니다
lepe

1
다음 vmstat 1 2과 같이 사용해야 합니다. echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')] 그렇지 않으면 부팅 이후에vmstat 값을 제공 할 것입니다.
Joe

조 감사합니다 작동합니다. Paul, 모든 사람이 올바른 명령 줄을 볼 수 있도록 답을 편집하십시오
Pavlos Theodorou

그것을 잡아 줘서 고마워, Joe와 Pavlos! 맨 페이지의 해당 부분을 보지 못했습니다.
Paul

9

이 알려진 문제입니다 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

sar, mpstat ... 등을 포함한 다른 모든 방법은 2 / 3 %를 표시하지만이 명령은 항상 50 %를 표시합니다.
CMCDragonkai

@ CMCDragonkai 숫자가 변경되어야합니다 (방금 확인했습니다) 올바르게 복사 / 붙여 넣었습니까? 또한 CPU가 여러 개인 시스템에서는 top사용률을 단일 CPU 의 백분율로보고합니다 . 이것은 종종 훨씬 높은 비율을 얻을 수 있음을 의미합니다. 여기 9 지점을 참조 하십시오 .
terdon

이 명령이 내 시스템과 호환되지 않을 수 있습니다. 그러나 내가 시도한 다른 모든 방법은 1/2/3 %의 백분율을 얻습니다. 이는 htop을 실행하면 볼 수있는 반면,이 명령은 나에게 이상을줍니다.
CMCDragonkai

@CMCDragonkai는 다중 CPU 때문입니다. 이것에 의해 반환 된 수를 가져 와서 코어 수로 나누거나 top대화 형 모드 (그냥 실행 top) 에서 사용할 수 있고 거기에 도달하면 I(shift + i)를 눌러 코어 별 분류를 볼 수 있습니다.
terdon

CPU가 1 개뿐입니다.
CMCDragonkai

7

나는 여러 가지 방법을 시도했지만 이것이 가장 정확한 것 같습니다.

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)}'

여기서 부터


내 리눅스 (Linux machine_name 4.4.0-127-generic # 153-Ubuntu SMP Sat May 19 10:58:46 UTC 2018 x86_64 x86_64 x86_64 GNU / Linux)에는 $ 15 열이 없습니다 (/ proc / stat 파일의 CPU 라인) : cpu 17411187 27478 594887 646652526 585551 0 31838 000
Kemin Zhou

1
최고의 답변! 감사! 내 변형 : cat <(grep 'cpu'/ proc / stat) <(sleep 0.1 && grep 'cpu'/ proc / stat) | awk -v RS = "" '{printf "% .1f", ($ 13- $ 2 + $ 15- $ 4) * 100 / ($ 13- $ 2 + $ 15- $ 4 + $ 16- $ 5)}'
maXp December

maXp의 차이점은 하나의 십진수로 반올림 된 인쇄입니다 : %.1f내 의견으로는 다른 스크립트에서 해당 출력을 사용하면 더 읽기 쉽고 유용합니다.
lepe December

0

사용하십시오 -n2. 두 줄이 출력됩니다. 첫 번째 시간 top인쇄는 해당 시점의 상태에 해당되지 않습니다. 그런 다음 첫 줄을 무시하도록 스크립트를 조정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.