首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux CPU负载利用率统计

Linux CPU负载利用率统计

通常,有如下方式可以得到 cpu 利用率情况:
  • top 命令
e.g. top -m 20 -d 1 -t




  • <span style="font-size:14px;">User 0%, System 6%, IOW 0%, IRQ 0%  
  • User 1 + Nice 0 + Sys 34 + Idle 494 + IOW 0 + IRQ 0 + SIRQ 1 = 530  

  •   PID   TID PR CPU% S     VSS     RSS PCY UID      Thread          Proc  
  • 3385  3385  0   6% R   1460K    484K     root     top             top  
  •   631   631  2   0% S      0K      0K     root     ksmd  
  •     8     8  0   0% S      0K      0K     root     rcu_preempt  
  •     5     5  0   0% S      0K      0K     root     kworker/0:0H  
  •     6     6  1   0% S      0K      0K     root     kworker/u8:0  
  •     7     7  0   0% S      0K      0K     root     migration/0  
  •     9     9  0   0% S      0K      0K     root     rcu_bh  
  •    10    10  1   0% S      0K      0K     root     rcu_sched  
  •    11    11  1   0% S      0K      0K     root     migration/1  
  •    12    12  1   0% S      0K      0K     root     ksoftirqd/1  
  •    14    14  1   0% S      0K      0K     root     kworker/1:0H  
  •    15    15  2   0% S      0K      0K     root     migration/2  
  •    16    16  2   0% S      0K      0K     root     ksoftirqd/2  
  •    18    18  2   0% S      0K      0K     root     kworker/2:0H  
  •    19    19  3   0% S      0K      0K     root     migration/3  
  •    20    20  3   0% S      0K      0K     root     ksoftirqd/3  
  •    22    22  3   0% S      0K      0K     root     kworker/3:0H  
  •    23    23  1   0% S      0K      0K     root     khelper  
  •    33    33  1   0% S      0K      0K     root     kworker/1:1  
  •   111   111  1   0% S      0K      0K     root     bcm_hsotgctrl_e</span>  

top 命令是通过 用户空间 (userspace) 的方式, 统计得到结果。

  • cat /proc/stat




  • <span style="font-size:14px;">cpu  11469 450 27068 1882759 487 4 464 0 0 0  
  • cpu0 3098 117 8727 464531 67 3 408 0 0 0  
  • cpu1 2933 130 7136 471014 157 1 30 0 0 0  
  • cpu2 2983 90 5170 474272 131 0 8 0 0 0  
  • cpu3 2455 113 6035 472942 132 0 18 0 0 0  
  • intr 650070 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 2 72794 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 2961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 7075 0 17  
  • 978 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2162 7980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 313 0 0 4 1 0 0  
  • 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9206 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 20872 0 34798 161365 0 0 0 0 0 0 0 0 13461  
  • 3 20 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 36496 29298 21433 30846 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 2134 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 490 190 0 0 0 0 0  
  • 0 0 0 0 0 0 0 0 0 0 197 2 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 1288221  
  • btime 1356998414  
  • processes 3399  
  • procs_running 2  
  • procs_blocked 0  
  • softirq 249133 0 103834 1 0 0 0 34224 53095 1547 56432</span>  


其中,可以通过 cat /proc/cpuinfo 来验证 cpu core 的数量。
大多数情况, /proc/stat 得到的结果能够比较真实的反映系统真实状态。
然而,因为因为 kernel 何时/如何去收集系统状态信息不确定的特性, 有时得到的结果完全不可靠。




  • cpu  11469 450 27068 1882759 487 4 464 0 0 0  
  • cpu0 3098 117 8727 464531 67 3 408 0 0 0  
  • cpu1 2933 130 7136 471014 157 1 30 0 0 0  
  • cpu2 2983 90 5170 474272 131 0 8 0 0 0  
  • cpu3 2455 113 6035 472942 132 0 18 0 0 0  

其中, 第一行表示所有 cpu 的统计信息。第二行至第五行分别表示  cpu core 0 ~ 4 的统计信息。总的cpu统计信息值,等于每个 cpu core 对应值的累加。

每一列的数值单位为 jiffies。 jiffies 是内核的全局变量,用来表示系统启动以来的节拍数。

  • user(11469)           表示从系统启动到当前时刻,处于用户态的运行时间。不包含nice值为负的进程。
  • nice(450)               表示从系统启动到当前时刻,nice为负值的进程占用的cpu时间
  • system(27068)      表示从系统启动到当前时刻,处于内核态的运行时间
  • idle(1882759)       表示从系统启动到当前时刻,除了 iowait外的等待时间
  • iowait(487)            表示从系统启动到当前时刻,io 等待时间
  • irq(4)                      表示从系统启动到当前时刻,硬中断花费的时间
  • softirq(464)            表示从系统启动到当前时刻,软中断花费的时间
  • steal(0)                   表示从系统启动到当前时刻,运行其他虚拟环境中的操作系统花费的时间
  • guest(0)                  表示从系统启动到当前时刻,运行在通过Linux内核控制的客户操作系统上的虚拟cpu 的时间
  • guest_nice(0)        表示从系统启动到当前时刻,运行在通过Linux内核控制的客户操作系统上的虚拟cpu 的时间, nice 为负值进程




  • intr 650070 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 2 72794 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 2961 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 0 0 0 0 7075 0 17  
  • 978 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2162 7980 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 313 0 0 4 1 0 0  
  • 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9206 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 0 0 20872 0 34798 161365 0 0 0 0 0 0 0 0 13461  
  • 3 20 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 36496 29298 21433 30846 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 2134 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 490 190 0 0 0 0 0  
  • 0 0 0 0 0 0 0 0 0 0 197 2 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  


  • sum(650070)          表示系统中所有中断次数之和
  • 其后每一个数值,表示从 irq[0] ~ irq[ nr_irqs -1 ] 对应的中断产生次数




  • ctxt 1288221  
  • btime 1356998414  
  • processes 3399  
  • procs_running 2  
  • procs_blocked 0  

  • ctxt                        context switch 的次数
  • btime                   从源代码应该表示从系统启动到当前时刻,系统时间 单位:ns。但是实际似乎不变??
  • processes          系统产生的线程数
  • procs_running    当前运行的线程数量
  • procs_blocked   当前被 iowait 阻塞的线程数量




  • <span style="font-size:14px;">softirq 249133 0 103834 1 0 0 0 34224 53095 1547 56432</span>  

  • sum_softirq(249133)      所有 软中断时间之和
  • HI_SOFTIRQ(0)
  • TIMER_SOFTIRQ(103834)
  • NET_TX_SOFTIRQ (1)
  • NET_RX_SOFTIRQ (0)
  • BLOCK_SOFTIRQ (0)
  • BLOCK_IOPOLL_SOFTIRQ (0)
  • TASKLET_SOFTIRQ (34224)
  • SCHED_SOFTIRQ ( 53095)
  • HRTIMER_SOFTIRQ (1547)
  • RCU_SOFTIRQ (56432)
显然,  sum_softirq 等于所有其他单项 softirq 时间之和。
返回列表