红联Linux门户
Linux帮助

Linux:cpu使用百分比的计算

发布时间:2016-06-24 11:00:15来源:topspeedsnail.com作者:斗大的熊猫

处理器时间由分离的时间片(ticks)组成。在一些时间片上,cpu繁忙;另一些时间片上,cpu空闲。下图表示,在10个时间片上其中6个是繁忙的,cpu使用百分比是6/10 = 60%,也即是40%的空闲时间。

Linux:cpu使用百分比的计算

注意:一个cpu周期是单个脉冲时间,脉冲由高低电压组成。每秒中有上亿个ticks,取决于cpu的频率。


你可以从/proc/stat中获得自计算机启动后的CPU ticks个数:

$ cat /proc/stat
user nice  system  idle   iowait  irq  softirq steal guest guest_nice
cpu  1732 182    590    4682    1022    0      34     0    0      0


计算公式

自计算机启动后总的CPU时间:

@1 = user+nice+system+idle+iowait+irq+softirq+steal

自计算机启动后总的CPU空闲时间:

@2 = idle + iowait

自计算机启动后CPU繁忙的时间:

@3 = @1 - @2

总的cpu使用百分比:

@3 / @1 X 100

注意 Guest 和 Guest_nice已经计算到了 user 和 nice中。


为了获得实时的cpu使用百分比,你需要计算时间间隔的ticks数。

实时计算cpu使用百分比的的bash脚本(Paul Colby编写):

#!/bin/bash
# by Paul Colby (http://colby.id.au), no rights reserved ;)

PREV_TOTAL=0
PREV_IDLE=0

while true; do
# Get the total CPU statistics, discarding the 'cpu ' prefix.
CPU=(`sed -n 's/^cpu\s//p' /proc/stat`)
IDLE=${CPU[3]} # Just the idle CPU time.

# Calculate the total CPU time.
TOTAL=0
for VALUE in "${CPU[@]}"; do
let "TOTAL=$TOTAL+$VALUE"
done

# Calculate the CPU usage since we last checked.
let "DIFF_IDLE=$IDLE-$PREV_IDLE"
let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
echo -en "\rCPU: $DIFF_USAGE%  \b\b"

# Remember the total and idle CPU times for the next check.
PREV_TOTAL="$TOTAL"
PREV_IDLE="$IDLE"

# Wait before checking again.
sleep 1
done

Linux:cpu使用百分比的计算


本文永久更新地址:http://www.linuxdiyf.com/linux/21795.html