我试图了解空闲时系统上的平均负载。以下是系统运行几个小时后的一些结果,几乎没有安装任何东西。
虚拟机状态
root@arm:~# vmstat 1
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 0 62092 17860 135940 0 0 9 21 158 245 1 1 97 0
0 0 0 62092 17860 135940 0 0 0 0 105 137 0 0 100 0
0 0 0 62060 17860 135940 0 0 0 0 105 128 0 0 100 0
0 0 0 62060 17860 135940 0 0 0 0 105 174 0 0 100 0
0 0 0 62060 17860 135940 0 0 0 0 105 155 0 0 100 0
0 0 0 62092 17860 135940 0 0 0 0 105 134 0 0 100 0
0 0 0 62092 17860 135940 0 0 0 0 105 127 0 0 100 0
0 0 0 62092 17860 135940 0 0 0 0 106 133 0 0 100 0
0 0 0 62092 17860 135940 0 0 0 0 105 129 0 0 100 0
0 0 0 62092 17868 135940 0 0 0 52 2101 4081 0 4 95 1
0 0 0 62092 17868 135940 0 0 0 0 103 173 0 0 100 0
0 0 0 62060 17868 135940 0 0 0 0 103 129 0 0 100 0
统计数据
root@arm:~# mpstat 1
Linux 3.10.0 (arm) 03/25/15 _armv7l_ (1 CPU)
20:02:04 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
20:02:05 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:06 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:07 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:08 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:09 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:10 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:11 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:12 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:13 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
20:02:14 all 0.00 0.00 0.00 0.00 0.00 0.99 0.00 0.00 99.01
20:02:15 all 0.00 0.00 0.00 0.00 0.00 0.99 0.00 0.00 99.01
20:02:16 all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
萨尔
root@arm:~# sar
Linux 3.10.0 (arm) 03/25/15 _armv7l_ (1 CPU)
17:53:42 LINUX RESTART
17:54:01 CPU %user %nice %system %iowait %steal %idle
17:55:01 all 0.25 0.00 0.63 0.00 0.00 99.12
17:56:01 all 0.07 0.00 0.47 0.00 0.00 99.47
17:57:01 all 0.25 0.00 0.43 0.02 0.00 99.30
17:58:01 all 0.20 0.00 0.47 0.03 0.00 99.30
17:59:02 all 0.13 0.00 0.30 0.03 0.00 99.53
18:00:01 all 0.08 0.00 0.36 0.02 0.00 99.54
18:01:01 all 0.12 0.00 0.45 0.02 0.00 99.4
所有三个公用事业公司都有类似的结果。现在为顶级..
顶部
top - 19:50:39 up 2:47, 1 user, load average: 0.81, 0.77, 0.77
Tasks: 50 total, 1 running, 49 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.4 us, 0.8 sy, 0.0 ni, 97.3 id, 0.4 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem: 251692 total, 189540 used, 62152 free, 17724 buffers
KiB Swap: 0 total, 0 used, 0 free, 135920 cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5249 root 20 0 3100 1176 864 R 10.7 0.5 0:00.07 top
1 root 20 0 2104 708 612 S 0.0 0.3 0:01.16 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.05 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.25 kworker/u2:0
7 root 20 0 0 0 0 S 0.0 0.0 0:00.01 rcu_preempt
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
202 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
204 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
206 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
235 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khubd
请注意,平均负载是[0.81, 0.77, 0.77]!
知道是什么原因导致如此高的“平均负载”吗?
编辑:这个问题与平均负载无关。
“负载平均数字给出了运行队列中的作业数量(状态 R)或等待磁盘 I/O(状态 D)”
如果i/o几乎为零,怎么会有状态D进程,运行队列里怎么会有这么多作业?有没有办法知道那里有哪些工作?
答案1
平均负载是一个相对术语;可能有 0.01、3.00、14.00 - 它只是备份了多少工作的指标,它是可用内核数量的函数。在 4 核系统上,3.9 意味着不备份任何内容(但几乎......)。
查看 的输出top
,我发现您仅将 10.7% 的 CPU 用于top
。我猜,但你有一个低端核心。在这种情况下,平均值很容易达到 0.8 的范围。
需要注意的是,平均负载并不直接与 CPU 的非空闲百分比相关,而是与正在传递的工作量以及争用程度(如果有)相关。
对于实际计算 loadavg 的复杂性,这里有一个更详尽的答案:https://stackoverflow.com/questions/11987495/linux-proc-loadavg
答案2
假设 perf 在你的系统上运行(它只是在我的旧笔记本电脑上崩溃),你可以获得更细粒度的 CPU 统计,它显示总数的百分比,即忽略所有空闲时间,所以你会得到很大的百分比:
perf top --sort=comm
我想这并没有什么帮助,因为它与 IO 相关,尽管它至少会突出显示实际上正在醒来的首要任务,而不仅仅是一直在睡觉。