Apache 繁忙工作者数量高且平均负载高

Apache 繁忙工作者数量高且平均负载高

我几乎每天都会管理一个 Web 服务器,但发现其平均负载突然飙升,服务器规格如下:

  • 6 x 2.4 GHz 专用 CPU
  • 3GB 内存

这是运行 Debian 6 的 VPS,我通过安装了 apache、php 和 mysql apt。我不确定是否有配置错误。

今天,平均负载峰值过高,以至于服务器无法为 Web 应用程序 (WordPress) 提供服务。下面的屏幕截图显示了我们的服务器监控系统。您会注意到,高平均负载与高 Apache 繁忙工作线程数相关,随后内存也会达到最大值。

在此处输入图片描述

强制重启服务器后,尽管 CPU 使用率较低,但平均负载仍然高于平时。以下屏幕截图显示htopiotop

在此处输入图片描述

在此处输入图片描述

平均负载现在 > 6,这是 Apache 服务器状态显示的内容:

在此处输入图片描述

我真的不知道该如何调查此事。有人能帮我解决这个问题吗?

更新 1

我搜索了 apache 错误日志,没有发现任何达到最大执行时间的信息。但是,我确实收到了很多以下信息...从服务器开始加载时开始:

::1 - - [24/Feb/2014:15:03:31 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:32 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:33 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:34 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:35 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:36 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:37 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:38 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:39 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"
::1 - - [24/Feb/2014:15:03:41 +0000] "OPTIONS * HTTP/1.0" 200 152 "-" "Apache/2.2.16 (Debian) (internal dummy connection)"

请注意它们都发生在前一个之后约 1 秒...也许这是某种现象。

更新 2

因此,我让服务器主机将 VPS 移至新的虚拟机管理程序,但之后它仍然具有相当高的iowait。我运行了iostat 1,这是我收到的结果:

在此处输入图片描述

这有助于识别问题吗?

答案1

看起来好像是某个地方的脚本导致了负载增加。

首先查看 Apache 错误日志并查找 max_execution 时间或超时。转到访问日志并查找可能导致挂起的正在访问的脚本。

答案2

您可以采取一些措施来调查问题,包括使用 vmstat 2(例如 - 这将每 2 秒显示一次关键资源的输出)。

不过,让我感到吃惊的是交换空间的使用量 - 对于一台拥有 3 GB 的服务器来说,841MB 的交换空间非常大。我怀疑您的系统正在交换空间,导致 IO 变得非常高,并推高了负载等。如果这个假设是正确的,那么解决方案就是处理交换空间。

您要么需要向系统投入更多内存,要么更改交换处理方式,或者两者兼而有之。我建议从后者开始 - 只需配置 swappiness 即可。要执行此操作,请键入 echo 'vm.swappiness = 10' >> /etc/sysctl.conf,然后键入“sysctl -p”。这将使 CPU 做更多工作,但交换更少。在许多 VM 上,磁盘 IO 是一个瓶颈,因此影响非常即时且显著。

投入更多的 RAM 还将减少交换量并加快系统速度。

相关内容