2012-11-23 3 views
3

나는 하나의 CPU, bash를 사용하는 우분투 시스템의 전체 CPU 사용량을 계산하려고합니다. 내가 만들고있는 시스템 모니터링 스크립트에 대한 전반적인 CPU 사용률이 필요합니다. 내가 찾은 대안은 다음 코드를 사용하는 것입니다bash를 사용하여 효과적으로 CPU 사용량을 계산하는 방법은 무엇입니까?

top -n 1 | grep "Cpu" 

:이 코드

read cpu a b c previdle rest < /proc/stat 
prevtotal=$((a+b+c+previdle)) 
sleep 0.5 
read cpu a b c idle rest < /proc/stat 
total=$((a+b+c+idle)) 
CPU=$((100*((total-prevtotal) - (idle-previdle))/(total-prevtotal))) 
echo $CPU 

문제는 문제는 내가 다음 코드를 사용할 때 CPU 사용률 %가 항상 동일하다는 것이다 그것이 완전히 정확한지 나는 모른다. 몇 가지 질문이 있습니다. 우선 첫 번째 코드가 실패하는 이유는 무엇입니까? 둘째, 두 번째 코드는 신뢰할 수 있습니까? 그렇지 않다면, 시스템의 전반적인 CPU 사용률을 신뢰할 수있는 읽기 위해 어떤 코드를 사용할 수 있습니까? 감사! SYSTAT 패키지로 제공

답변

1

mpstat의는

당신이 당신의 코드는 IO가 CPU 사용률에 영향을 수있는 대기 시간을 폐기한다

+0

나는 잘못된 일을하고 있는지 알지 못하지만 내가 할 때 알지 못한다. 해야 할 것; mpstat; "여러 프로세스를 실행중인 경우에도 항상 CPU 사용률에 대해 동일한 값을 얻고 있습니다. – Lynx

+0

이제는 mpstat 명령을 아무 매개 변수없이 실행하면 출력이 엉뚱한 것임을 발견했습니다 ...이 파일은 mpstat 1 1처럼 사용해야합니다 – Lynx

1

-얻기 쉽다 사용 SYSTAT 설치해야합니다 매우 좋다. 당신은 각각/PROC/통계/항목에 해당하는 것을 보려면 다음 링크를 참조 할 수 있습니다

전체 CPU 사용률은 다음 수식을 통해 계산 될 수있다

http://man7.org/linux/man-pages/man5/proc.5.html

:

CPU_Util = (사용자 + 시스템 +) + 현재 softirq + 훔치는 좋은/(사용자 시스템 + + 현재 softirq + + 유휴 + iowait가)를 훔치는 좋은

는 50ms의를 통해 CPU 사용률을 계산합니다 간단한 bash는 스크립트가 될 것 + :

#!/system/bin/sh 

# Read /proc/stat file 
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat 

cpu_active_prev=$((user+system+nice+softirq+steal)) 
cpu_total_prev=$((user+system+nice+softirq+steal+idle+iowait)) 

usleep 50000 

read cpu user nice system idle iowait irq softirq steal guest< /proc/stat 

cpu_active_cur=$((user+system+nice+softirq+steal)) 
cpu_total_cur=$((user+system+nice+softirq+steal+idle+iowait)) 

cpu_util=$((100*(cpu_active_cur-cpu_active_prev)/(cpu_total_cur-cpu_total_prev))) 

echo $cpu_util