16 个 HP 工作站中只有一台的平均负载较高

16 个 HP 工作站中只有一台的平均负载较高

我有一个实验室,里面有 16 个 HP Z620 系统,全部一样(同时购买),安装的 Ubuntu 12.04 完全相同,当前内核为 3.13.0-44-generic。嗯,不是相当所有都一样:其中 15 个的 BIOS 版本为 J61 v03.06,第 16 个的 BIOS 版本为 J61 v03.18。所有都具有静态 IP 地址,并且禁用了网络管理器、avahi-daemon 和 cups-browsed。

奇怪的是,这 15 个系统的平均负载远小于 1(在我撰写本文时,uptime 显示的平均负载为 0.00),但第 16 个系统的平均负载始终为 1.00 或更高。以下是顶部快照:

    top - 13:13:04 up 25 min,  3 users,  load average: 1.00, 1.03, 0.91
    Tasks: 203 total,   1 running, 202 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.9 us,  0.3 sy,  0.0 ni, 97.5 id,  1.3 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem:  12232332 total,  1583716 used, 10648616 free,    63148 buffers
    KiB Swap: 12505084 total,        0 used, 12505084 free.   626708 cached Mem

      PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
        1 root      20   0   33772   3024   1468 S   0.0  0.0   0:00.79 init
        2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd
        3 root      20   0       0      0      0 S   0.0  0.0   0:00.10 ksoftirqd/0
        4 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0
        5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:+
        7 root      20   0       0      0      0 S   0.0  0.0   0:01.64 rcu_sched
        8 root      20   0       0      0      0 S   0.0  0.0   0:00.28 rcuos/0
        9 root      20   0       0      0      0 S   0.0  0.0   0:00.23 rcuos/1
       10 root      20   0       0      0      0 S   0.0  0.0   0:00.20 rcuos/2
       11 root      20   0       0      0      0 S   0.0  0.0   0:01.95 rcuos/3
       12 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcu_bh
       13 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/0
       14 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/1
       15 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/2
       16 root      20   0       0      0      0 S   0.0  0.0   0:00.00 rcuob/3

我很困惑为什么这个盒子上的平均负载总是 1.00 或更高。有什么建议吗?

顺便说一句,我将系统 16 上的 BIOS 升级到了版本 3.85,但这并没有改变任何东西。我还安装了 Ubuntu 14.04,但仍然出现同样的情况。

答案1

当 top 没有将 CPU 使用率或 I/O 等待确定为平均负载的来源时,通常它是一个或几个处于不可中断睡眠状态的任务(在您的情况下是一个任务)。使用以下命令识别它们:

ps -e -o state,pid,cmd | grep ^D

也可以使用 vmstat,但只能提供处于不可中断睡眠状态的任务数。例如:

doug@doug-64:~$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
0  0    168  69980 124836 2525672    0    0   252    29    1    0  0  0 99  0

不间断睡眠中的任务位于“procs”下的“b”列下。

如果不观察 CPU 使用率和/或 I/O 等待时间,则在“r”列(等待运行时间的进程)中观察到任何恒定的非零数字是非常不寻常的。在下面的两个示例中,一个是针对未加载的系统,另一个是针对已加载的系统。

doug@s15:~/cse$ vmstat 10 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0  99072 3302096 415420 7927960    0    0     2     9    4    0  2  0 98  0  0
 0  0  99072 3302320 415420 7927960    0    0     0     4   68  160  0  0 100  0  0
 0  0  99072 3302304 415420 7927960    0    0     0     9   62  132  0  0 100  0  0
 0  0  99072 3302064 415420 7927960    0    0     0     0   63  138  0  0 100  0  0
 0  0  99072 3302040 415420 7927960    0    0     0    12   66  155  0  0 100  0  0
 0  0  99072 3302024 415420 7927960    0    0     0    16   90  150  1  0 99  0  0
 0  0  99072 3302008 415420 7927960    0    0     0     6   61  131  0  0 100  0  0
 0  0  99072 3301868 415424 7927960    0    0     0     5   72  167  0  0 100  0  0
 0  0  99072 3301852 415432 7927956    0    0     0    13   66  145  0  0 100  0  0
 0  0  99072 3301836 415432 7927960    0    0     0    12   63  133  0  0 100  0  0

doug@s15:~/temp$ vmstat 10 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
13  0  99072 1271288 415992 9952884    0    0     2     9    4    0  2  0 98  0  0
13  0  99072 1271304 415992 9952884    0    0     0     0 2670 1198 99  0  1  0  0
13  0  99072 1270932 415996 9952884    0    0     0    12 2696 1240 99  0  1  0  0
13  0  99072 1270916 415996 9952884    0    0     0     1 2662 1166 99  0  1  0  0
13  0  99072 1270800 416000 9952884    0    0     0     1 2666 1205 99  0  1  0  0
13  0  99072 1270636 416004 9952884    0    0     0    18 2720 1264 99  0  1  0  0
13  0  99072 1270644 416004 9952884    0    0     0     3 2670 1170 99  0  1  0  0
13  0  99072 1270520 416004 9952884    0    0     0     0 2673 1218 99  0  1  0  0
14  0  99072 1269116 416008 9952888    0    0     0    14 2692 1250 99  0  1  0  0
14  0  99072 1271140 416008 9952888    0    0     0     1 2662 1168 99  0  1  0  0

doug@s15:~/temp$ uptime
 14:46:47 up 12 days, 22:23,  4 users,  load average: 12.59, 12.15, 8.31

如果怀疑队列中存在某种挂起进程,请尝试以下方法识别:

ps -e -o state,pid,cmd | grep -v "ps -e -o" | grep ^R

示例(其中我有 3 个重型进程正在正确运行):

doug@s15:~/temp$ ps -e -o state,pid,cmd | grep -v "ps -e -o" | grep ^R

R  9827 ../c/consume 90.000000 50.000000 100.000000
R  9828 ../c/consume 90.000000 50.000000 100.000000
R  9829 ../c/consume 90.000000 50.000000 100.000000

执行该命令几次以帮助识别真正的罪魁祸首,因为很可能有虚假的真实进程正在运行。

最后要尝试的是查看整个线程列表以查找任何异常。示例:

doug@s15:~/ubuntu-help$ ps -e -o state,pid,cmd
S   PID CMD
S     1 /sbin/init
S     2 [kthreadd]
...
S 17579 [kworker/u16:0]
R 17613 ps -e -o state,pid,cmd
S 22071 [kworker/0:0]

第一列中除“S”或“R”以外的任何内容都是值得关注的。也许可以使用以下方法过滤列表:

ps -e -o state,pid,cmd | grep -v ^S

相关内容