服务器负载每天都会激增几次,过去一个月的平均负载是全年平均负载的 5 倍

服务器负载每天都会激增几次,过去一个月的平均负载是全年平均负载的 5 倍

我为我们的 (Debian) LAMP 集群设置的 Munin 通知一直在不断通知我,我们生产机器上的负载已经处于危险水平。虽然全年的平均负载通常在 2 到 8 之间,但过去一个月的负载,甚至在过去一个月内,已经飙升至 10、18,有时甚至达到 50-60。峰值每次仅持续 5-10 分钟,大约每 2-3 小时发生一次。峰值不会影响性能,因为我有一个脚本,当负载超过 10 时,它会将流量从我们的服务器发送到镜像 CDN。我寻找过与此时间范围相关的 cron 作业,但我看不到任何会导致这种情况的原因。网站流量也很正常(我们每天收到大约 20 万次访问)。此 Web 服务器依赖的 MySQL 数据库似乎运行正常。该服务器上的负载很低,性能良好。

我也试图回忆一下在这个问题出现时我做过什么改变,但我真的想不出任何事情。

这可能没什么可说的。也许上面的打印输出(下面)中有一些我没看到的线索。

我该如何继续寻找原因?

-- 当负载未达到峰值时的典型顶部:

top - 11:13:09 up 472 days, 25 min,  1 user,  load average: 6.08, 4.29, 3.80
Tasks: 105 total,   1 running, 104 sleeping,   0 stopped,   0 zombie
Cpu(s): 41.2%us,  5.8%sy,  0.0%ni, 49.5%id,  2.7%wa,  0.1%hi,  0.7%si,  0.0%st
Mem:   3369592k total,  2166980k used,  1202612k free,   559504k buffers
Swap:  2650684k total,     1892k used,  2648792k free,  1129116k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
32046 apache    15   0 36300  12m 9828 S   20  0.4   0:01.97 apache2
32679 apache    15   0 36568  13m  10m S   19  0.4   0:01.69 apache2
31441 apache    15   0 36616  13m  10m S   19  0.4   0:04.13 apache2
31477 apache    15   0 36596  13m 9.8m S   15  0.4   0:01.99 apache2
31993 apache    15   0 36876  16m  12m S   12  0.5   0:02.01 apache2
31782 apache    15   0 36836  14m  10m S    8  0.4   0:02.17 apache2
32198 apache    15   0 36536  13m  10m S    7  0.4   0:01.59 apache2
  880 apache    15   0 36508 9708 6236 S    7  0.3   0:00.42 apache2
31945 apache    17   0 36876  16m  13m S    5  0.5   0:03.17 apache2
32197 apache    16   0 36636  10m 7504 S    5  0.3   0:02.70 apache2
32326 apache    15   0 37024  11m 7632 S    5  0.3   0:02.15 apache2
32565 apache    15   0 37280  13m 9.8m S    5  0.4   0:03.75 apache2
32676 apache    15   0 36896  16m  12m S    4  0.5   0:00.95 apache2
32678 apache    15   0 36536  12m 9692 S    4  0.4   0:02.27 apache2
  974 apache    16   0 37064 9888 6016 D    4  0.3   0:00.13 apache2
32150 apache    16   0 36832  13m  10m S    3  0.4   0:01.74 apache2
31780 apache    16   0 36848  11m 7660 S    3  0.3   0:02.87 apache2

以下是我们进行尖峰测试时的顶部:

top - 15:25:22 up 474 days,  4:37,  1 user,  load average: 78.73, 50.20, 24.79
Tasks: 250 total,   4 running, 244 sleeping,   0 stopped,   2 zombie
Cpu(s): 36.5%us,  4.7%sy,  0.0%ni, 56.4%id,  2.0%wa,  0.1%hi,  0.3%si,  0.0%st
Mem:   3369592k total,  2099904k used,  1269688k free,   553840k buffers
Swap:  2650684k total,     5104k used,  2645580k free,   729252k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
27716 apache    15   0 43612  20m 9.8m S   20  0.6   0:01.95 apache2
16782 apache    16   0 39460  19m  13m R   19  0.6   0:04.61 apache2
19701 apache    15   0 39232  16m  10m S   17  0.5   0:03.18 apache2
19677 apache    16   0 39208  15m 9956 R   12  0.5   0:05.03 apache2
16760 apache    15   0 36620  16m  13m S    8  0.5   0:06.35 apache2
19798 apache    15   0 36564  13m 9988 S    6  0.4   0:02.76 apache2
20325 apache    15   0 36616  13m 9704 S    6  0.4   0:02.11 apache2
19699 apache    15   0 36860  15m  12m S    5  0.5   0:03.10 apache2
15109 apache    15   0 36624  16m  13m S    4  0.5   0:05.97 apache2
15101 apache    15   0 36592  13m  10m S    3  0.4   0:08.96 apache2
15112 apache    15   0 36612  16m  13m S    3  0.5   0:07.57 apache2
20204 apache    15   0 44612  21m 9.9m S    3  0.6   0:03.55 apache2
19624 apache    15   0 36588  13m  10m S    3  0.4   0:02.00 apache2
20151 apache    15   0 36616  16m  13m S    3  0.5   0:02.14 apache2
26252 apache    15   0 37072  13m   9m S    3  0.4   0:01.09 apache2
19805 apache    15   0 36472  16m  12m S    2  0.5   0:03.68 apache2
20163 apache    15   0 36640  13m  10m S    2  0.4   0:02.50 apache2
27260 apache    18   0 44292  20m 9328 S    2  0.6   0:02.08 apache2
29149 apache    15   0 36172  11m 8744 S    2  0.4   0:00.69 apache2
20315 apache    15   0 36360  15m  12m S    2  0.5   0:02.06 apache2
29148 apache    16   0 36184 8872 5644 S    2  0.3   0:00.08 apache2

答案1

实际上,Loadavg 并不能告诉您太多有关系统是否性能不佳的信息;它是一种非常通用的指标,用于描述系统的繁忙程度,其中繁忙定义为当前正在执行或等待执行 CPU 指令的进程数的索引。在八核系统上,工作负载由大量短命进程(例如 Web 服务器)描述,loadavg 超过 50 甚至可能不会引起我的注意。

您能否将这些峰值与您的 apache 日志关联起来,以查看在峰值期间响应时间是否受到影响?您是否只是在峰值期间处理更多请求?您是否保存了 iowait 和用户与系统 cpu 等统计数据,它们是否相关?另一位提到交换的发帖人是正确的:交换会导致进程堆积,因为内存访问速度减慢到磁盘速度,这会导致更高的 loadavg,因为进程会挂起。

这些都是需要调查的事情;更多数据和历史保存的数据可以帮助您解决这个问题。希望这能有所帮助;祝你好运!

答案2

据新上任的系统管理员称,负载之所以这么高,是因为我们最近一直在不断达到带宽分配的容量(不确定是入站还是出站)。这个问题的一些回答者说得对,这根本不是服务器故障的迹象。这是一个网络问题,新请求必须等待带宽清除后才能继续 - 因此,负载(延迟)很高。无论如何,我们最近搬到了一个带宽分配更大的新数据中心。谢谢大家!

答案3

您在后端使用 Memcached 之类的东西吗?TTL 会在那个时间范围内过期吗?

当负载超过 100% 时,性能是否真的会受到影响?在多核 CPU 中,这很可能是正常的。

PS,看起来你正在动用你的 SWAP 分配;我会看一下。

答案4

如果您的 Apache 应用程序针对数据库后端运行,则很有可能在数据库端遇到锁定/争用问题。您频繁生成(或重复使用)的 Apache 进程会发现自己正在等待长时间运行的数据库请求完成,因此累积到一个很大的数字。

因此,请检查您的数据库服务器是否能反映负载情况。如果您碰巧使用 MySQL(LAMP 中的 M 是吗?),则应考虑使用mysql-snmp以获得更详细的报告。

相关内容