linux系统在运行过程中,会将CPU的一些使用信息记录在/proc/stat文件里面。

  cat /proc/stat信息如下:

  cpu  42070 4176 97027 6393033 15134 501 556 0 0

  cpu0 42070 4176 97027 6393033 15134 501 556 0 0

  intr 4214035 120 22341 0 1 1 0 5 0 1 0 0 0 46417 0 0 108606 73951 91332 0 1175935 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

  ctxt 5195532

  btime 1304348496 

  processes 11005

  procs_running 2

  procs_blocked 0

  softirq 2827794 0 849358 33902 1154998 199387 20953 0 1511 567685

 

  1. cpu/cpu0 为单个CPU的使用状况。其后面一串数据代表每个功能的使用时间(单位一般为10ms):

     cpux   : cpu序号,单核仅仅只有一个,双核有2个,以此类推

     42070  : 用户态(user)下cpu使用时间

     4176   : 优先级(nice)为负的程序的cpu使用时间

     97027  : 系统态(sys)下cpu使用时间

     6393033: cpu空闲使用时间(idle)

     15134  : 硬盘IO(iowait)等待时间

     501    : 硬中断(irq)使用时间

     556    : 软中断(soft)使用时间

     0      : 未知

     0      : 未知

  2. 计算cpu使用率的方法:

    通常我们说的cpu的使用率,是指cpu在某段时间内的使用率,而不是从开机时间到当前的使用率。因此我们必须获取两次cpu状态,并通

 

过对这两次状态进行对比,从而得到当前时间的cpu使用率。

    第一次获取cpu状态 -> 延时5秒 -> 第二次获取cpu状态 -> 通过获取得值进行计算,得到当前cpu在这5秒内的使用率

    计算公式: 1 - (idle_time2 - idle_time1)/(all_time2 - all_time1)

 

c语言代码:

 

shell语言:

perl语言:

 

扩展知识:

  1. 什么是用户态和内核态

   用户态是指当前cpu处理的是用户操作代码。

   内核态是指当前cpu处理的是内核的代码。

   他们通过cpu中的寄存器的两位进行控制,内核态用intel cpu的Ring0模式,而用户态使用intel cpu的Ring3模式。在用户态状态下不能访问内核态的代码和数据的地址空间。

 

 

 

Logo

更多推荐