尽管 CPU 使用率较低,但服务器负载非常高

尽管 CPU 使用率较低,但服务器负载非常高

当我运行命令时top我得到了这个

top - 23:20:50 up  1:25,  1 user,  load average: 11.02, 11.20, 10.41
Tasks: 262 total,   3 running, 258 sleeping,   1 stopped,   0 zombie
Cpu(s): 75.6%us,  6.1%sy,  0.0%ni,  3.1%id, 14.3%wa,  0.0%hi,  0.8%si,  0.0%st
Mem:   2028800k total,  1669384k used,   359416k free,   153300k buffers
Swap:   523260k total,     2636k used,   520624k free,   749404k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
10221 www-data  20   0  416m  24m 5376 S   46  1.2   0:27.88 apache2
11290 www-data  20   0  420m  28m 3964 S   28  1.4   0:09.30 apache2
11844 www-data  20   0  424m  31m 5336 S   21  1.6   0:04.00 apache2
11670 www-data  20   0  410m  18m 3688 S   18  1.0   0:04.10 apache2
11147 www-data  20   0  417m  25m 5360 R   15  1.3   0:09.71 apache2
10615 www-data  20   0  418m  26m 5460 S    6  1.3   0:18.89 apache2
 3014 mysql     20   0 1316m 128m 8188 S    6  6.5   4:24.84 mysqld
10852 www-data  20   0  419m  26m 5376 S    6  1.4   0:16.05 apache2
11278 www-data  20   0  420m  28m 3984 S    3  1.5   0:10.39 apache2
 1589 root      20   0     0    0    0 D    1  0.0   1:16.40 jbd2/sda1-8
12024 www-data  20   0 81044 4732 3180 S    1  0.2   0:00.04 sendmail
 5281 root      20   0 97.9m 4696 1800 D    1  0.2   0:56.55 sendmail-mta
11927 root      20   0 17464 1452  932 R    1  0.1   0:00.32 top
12009 root      20   0 99.6m 5232 2720 D    1  0.3   0:00.06 sendmail-mta
 2929 syslog    20   0  243m 3104 1140 S    1  0.2   0:25.32 rsyslogd
 3029 bind      20   0  238m  21m 3032 S    1  1.1   0:27.77 named
 6627 root      20   0  101m 6872 2852 D    1  0.3   0:07.54 sendmail-mta
10525 root      20   0  100m 5308 1536 D    1  0.3   0:02.33 sendmail-mta
14241 root      20   0  100m 6136 2868 S    1  0.3   0:31.78 sendmail-mta
18543 root      20   0  100m 6300 2868 R    1  0.3   0:27.42 sendmail-mta
22589 root      20   0  100m 6472 2884 S    1  0.3   0:22.43 sendmail-mta
31196 root      20   0  100m 6604 2852 D    1  0.3   0:16.98 sendmail-mta
    1 root      20   0 24332 2012 1356 S    0  0.1   0:05.23 init
 1391 root      20   0     0    0    0 S    0  0.0   0:02.97 kworker/0:0
 2549 root      20   0  101m 6728 2852 D    0  0.3   0:12.15 sendmail-mta
 3395 smmsp     20   0 83048 5076 1460 S    0  0.3   0:24.24 sendmail-msp
 3661 ntp       20   0 37772 2252 1620 S    0  0.1   0:00.39 ntpd
 5382 smmsp     20   0 83048 6924 3324 S    0  0.3   0:20.41 sendmail-msp
 5483 root      20   0 97.9m 4696 1800 D    0  0.2   0:56.38 sendmail-mta
 7502 root      20   0     0    0    0 S    0  0.0   0:00.80 kworker/1:0
12025 root      20   0 99700 3956 1660 D    0  0.2   0:00.01 sendmail-mta
    2 root      20   0     0    0    0 S    0  0.0   0:00.00 kthreadd
    3 root      20   0     0    0    0 S    0  0.0   0:00.10 ksoftirqd/0
    6 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/0
    7 root      RT   0     0    0    0 S    0  0.0   0:00.00 migration/1
    9 root      20   0     0    0    0 S    0  0.0   0:00.58 ksoftirqd/1
   11 root       0 -20     0    0    0 S    0  0.0   0:00.00 cpuset

但当我跑步时uptime

22:53:23 up 57 min,  1 user,  load average: 8.38, 9.22, 8.88

结果,我的 vBulletin 论坛锁定了所有用户。

有些事情显然是错误的,我该如何识别和解决问题?

非常感谢。

答案1

所以你确实占用了大量的 CPU。要么换一个更好的服务器,要么让你的论坛变得不那么受欢迎。你似乎还发送了相当多的邮件……你的论坛被黑客入侵了吗?有人把它当作垃圾邮件来源了吗?检查你的邮件日志……

答案2

[更新:答案是在添加完整顶部输出之前发布的。虽然答案仍然正确,但不再适用于这种情况]

负载不是 CPU 使用率,负载是运行队列中的进程数量。通常,高负载和低 CPU 使用率表示存在 I/O 问题,例如 I/O 缓慢或挂起。我曾经在邮件服务器上遇到过超过 9000 的负载,当时存储出了问题。几乎没有任何 CPU 使用率,而且 ssh 响应完美,它只是不再喜欢作为邮件服务器了。

答案3

您的 CPU 使用率很高(空闲时间 3.1%,正常时间 0%),而且磁盘负载也可能很高(尝试查看 vmstat 输出,检查块入/块出队列中是否存在超出范围的数字,或者等待时间是否存在一些高值,如果我没记错的话,这意味着等待某些 I/O 完成所花费的时间)。

在未加载的系统上,等待时间将接近 0%,并且读/写块的值会很小。

我在一个网站上也遇到过类似的问题,mysql 占用了大量磁盘和内存,而 php/apache 则主要受到 CPU 限制... 解决方案是将其一分为二:一台机器上安装 www 前端,另一台机器上安装 mysql 后端。然后事情就顺利多了...

无论如何,请尝试更好地了解导致您负载的原因 - 也许您的 sendmail 是问题的一部分,我看到很多这样的进程处于“D”状态(等待设备 - 即磁盘绑定)。首先确保它为您工作,而不是为其他人工作(中继垃圾邮件发送者的邮件或类似的东西...)

祝您狩猎愉快!:)

答案4

您应该只安装 postfix。您的邮件服务器可能由于配置而充当开放中继。Postfix 默认设置可以缓解这些问题,并且可能比重新配置 sendmail 更快 -

发出sendmail -bp以获取 sendmail 队列中的消息列表。如果 /var/spool/mqueue 中有大量不会消失的消息,您可以切换到该目录并 rm *。但是,如果有人当时正在发送消息,而 sendmail 在您之前没有删除该消息,该消息就会丢失。由于没有用于刷新队列的 sendmail 开关,您可能必须这样做。您还可以在其他线程中找到其他方法。

相关内容