https://i.niupic.com/images/2020/12/04/94f1.jpg
这个文件包含了所有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 ‘{print2″ “3″ “4″ “5″ “6″ “7″ “8}’)
    SYS_IDLE_1=(echoCPULOG_1 | awk ‘{print 4}’)
    Total_1=
    (echo CPULOG_1 | awk ‘{print1+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 ‘{print4}’)
    Total_2=(echoCPULOG_2 | awk ‘{print 1+2+3+4+5+6+7}’)

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

发表评论

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

Captcha Code