标题:
Linux CPU负载利用率统计
[打印本页]
作者:
look_w
时间:
2017-10-24 21:15
标题:
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 时间之和。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0