使用 vmstat、mpstat、sar 和 top 了解高平均负载

使用 vmstat、mpstat、sar 和 top 了解高平均负载

我试图了解空闲时系统上的平均负载。以下是系统运行几个小时后的一些结果,几乎没有安装任何东西。

虚拟机状态

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 相关,尽管它至少会突出显示实际上正在醒来的首要任务,而不仅仅是一直在睡觉。

相关内容