这个文件包含了所有CPU活动的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

第一行为各cpu时间和,其余各行cpu为各cpu时间明细。
对应信息从左至右分别为:
user nice system idle iowait irq softirq steal guest guest_nice
user:用户态的CPU时间
nice:低优先级程序所占用的用户态的cpu时间。
system:系统态的CPU时间
idle:CPU空闲的时间(不包含IO等待)
iowait:等待IO响应的时间
irq:处理硬件中断的时间
softirq:处理软中断的时间
steal:其他系统所花的时间(个人理解是针对虚拟机)
guest:运行时间为客户操作系统下的虚拟CPU控制(个人理解是访客控制CPU的时间)
guest_nice:低优先级程序所占用的用户态的cpu时间。(访客的)
CPU时间=user+system+nice+idle+iowait+irq+softirq
CPU利用率可以使用以下两个方法。先取两个采样点,然后计算其差值:
cpu usage=(idle2-idle1)/(cpu2-cpu1)100
cpu usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)
100

“intr”这行给出中断的信息,第一个为自系统启动以来,发生的所有的中断的次数;然后每个数对应一个特定的中断自系统启动以来所发生的次数。
“ctxt”给出了自系统启动以来CPU发生的上下文交换的次数。
“btime”给出了从系统启动到现在为止的时间,单位为秒。
“processes (total_forks) 自系统启动以来所创建的任务的个数目。
“procs_running”:当前运行队列的任务的数目。
“procs_blocked”:当前被阻塞的任务的数目。

1 对 “/proc/stat与CPU时间”的想法;

  1. 获取cpu占用率:
    function getCpuUsedRate(){
    CPULOG_1=$(cat /proc/stat | grep ‘cpu ‘ | awk ‘{print $2″ “$3” “$4” “$5” “$6” “$7” “$8}’)
    SYS_IDLE_1=$(echo $CPULOG_1 | awk ‘{print $4}’)
    Total_1=$(echo $CPULOG_1 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}’)

    sleep $CpuTouchTimePeriod

    CPULOG_2=$(cat /proc/stat | grep ‘cpu ‘ | awk ‘{print $2” “$3” “$4” “$5” “$6” “$7” “$8}’)
    SYS_IDLE_2=$(echo $CPULOG_2 | awk ‘{print $4}’)
    Total_2=$(echo $CPULOG_2 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}’)

    SYS_IDLE=`expr $SYS_IDLE_2 – $SYS_IDLE_1`
    Total=`expr $Total_2 – $Total_1`
    CurentCpuUsedRate=`expr “scale=3; 100-$SYS_IDLE/$Total*100” |bc -l`
    }

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Captcha Code