Apache:“服务器似乎很忙”,但有很多空闲进程

Dis*_*sco 1 capacity apache-2.2

我应该注意,我不是系统管理员。你很快就会明白这一点。:)

简而言之: Apache 在重载期间一直喘口气,所有进程都处于空闲状态。这是应用程序使用的轮询服务器。民意调查来自许多不同的端点。有时(每 4-5 分钟一次),如果我在看顶部,HTTPD 进程会同时空闲,导致流量停滞 10 秒左右。然后它会恢复。延迟是有问题的。

  • 服务器正在处理大量流量。这些是通过 HTTPS 进行的应用程序轮询,而不是网页(尽管我怀疑 Apache 知道其中的区别)
  • 上面提到的停顿导致交通变得不平衡:一段时间后,我得到了一个完整的流量,然后是平静,然后又是一个完整的流量
  • 每个民意调查都需要一个小的数据库浸入

Apache 日志

有时,但并非总是如此(主要是在重新启动后),我会在 error_log 中收到这些消息。大多数情况下,当它发生时,我在 error_log 中看不到任何内容。

[Mon Jun 30 17:55:17 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers,或 Min/MaxSpareServers),产生 8 个子节点,空闲 31 个,总共 98 个子节点
[Mon Jun 30 17:55:18 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers,或 Min/MaxSpareServers),产生 16 个孩子,有 14 个空闲,总共 98 个孩子
[Mon Jun 30 17:55:44 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 8 个子节点,有 74 个空闲子节点,总共 99 个子节点
[Mon Jun 30 17:55:54 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 8 个子节点,有 61 个空闲子节点,总共 99 个子节点
[Mon Jun 30 17:56:00 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 8 个子节点,有 0 个空闲子节点,总共 97 个子节点
[Mon Jun 30 17:56:02 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 16 个子节点,有 36 个空闲子节点,总共 99 个子节点
[Mon Jun 30 17:56:03 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 32 个子节点,有 39 个空闲子节点,总共 99 个子节点
[Mon Jun 30 18:08:17 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 8 个子节点,有 18 个空闲子节点,总共 99 个子节点
[Mon Jun 30 18:08:18 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 16 个孩子,有 63 个空闲,总共 98 个孩子
[Mon Jun 30 18:08:19 2014] [info] 服务器似乎很忙,(您可能需要增加 StartServers 或 Min/MaxSpareServers),产生 32 个子节点,有 74 个空闲子节点,总共 97 个子节点

Apache 配置(旧配置已注释掉)

只显示我怀疑相关的配置项

#超时 60
超时 20
保持活跃
MaxKeepAliveRequests 1000
保持活动超时 2

IfModule prefork.c
        启动服务器 85
        最小备用服务器 85
        最大备用服务器 100
        服务器限制 100
        最大客户 100
        #StartServers 60
        #MinSpareServers 60
        #MaxSpareServers 85
        #服务器限制 85
        #MaxClients 85
        MaxRequestsPerChild 1000
/If 模块

请注意,新旧配置在行为上没有区别。

环境 EC2、c1.medium、mod_perl、持久数据库连接、单独的RDS服务器、MySQL错误日志中无错误显示、Apache日志中无错误显示

顺便说一句,我已经看到了安装 mod-status 的建议,但我还没有想出如何去做,如果我这样做了,我不知道要寻找什么。

Dis*_*sco 5

谜团已揭开。

万一其他人发生这种情况:Apache 和数据库服务器之间的网络连接(通过 LAN 接口在 VPC 内部)变得拥挤。将数据库服务器升级到更大的实例解决了这个问题(暂时)。

背景:亚马逊每 5 分钟为其时间点恢复功能拍摄一次数据库快照。它会下载 RDS 实例上的二进制日志来执行此操作。

每 5 分钟,二进制日志就会被传输一次(大概是到另一个 EBS),在我的情况下,传输阻塞了 LAN 接口。Apache 每五分钟等待一次网络连接时就会停止,并且连接会堆积起来,有些最终会中止。