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

我应该注意到,我不是一个系统pipe理员。 你会很快弄清楚。 🙂

简而言之, Apache在重负载下保持呼吸,所有进程都闲置。 这是应用程序使用的轮询服务器。 民意调查来自很多不同的端点。 如果我正在观看最高峰,每隔4-5分钟,HTTPD进程将全部闲置,同时停止stream量达10秒左右。 然后恢复。 延迟是有问题的。

  • 服务器正在服务很多的stream量。 这些是通过HTTPS的应用程序民意调查,而不是网页(虽然我怀疑阿帕奇知道的区别)
  • 上述暂停导致交通不平衡:经过一段时间后,我得到了一个整体的交通,然后一个平静,然后再一个交通的一揽子
  • 每次调查都需要一个小的数据库

Apache日志

有时候 ,但并不总是(通常在重启之后),我在error_log中得到这些消息。 大多数情况下,我在error_log中什么也看不到。

 [2014年6月30日星期一17:55:17] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生8个孩子,有31个闲置,总共有98个孩子
 [2014年6月30日星期一17:55:18] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生16个孩子,有14个闲置,总共有98个孩子
 [2014年6月30日星期一17:55:44] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生8个孩子,有74个空闲,总共有99个孩子
 [2014年6月30日星期一17:55:54] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生8个孩子,有61个空闲,总共有99个孩子
 [2014年6月30日星期一17:56:00] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产卵8个孩子,有0个空闲,总共有97个孩子
 [2014年6月30日星期一17:56:02] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生16个孩子,有36个空闲,总共有99个孩子
 [2014年6月30日星期一17:56:03] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生32个孩子,有39个空闲,总共有99个孩子
 [2014年6月30日18:08:17] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生8个孩子,有18个空闲,总共有99个孩子
 [2014年6月30日星期一18:08:18] [信息]服务器似乎很忙,(你可能需要增加StartServers或Min / MaxSpareServers),产生16个孩子,有63个空闲,总共有98个孩子
 [2014年6月30日18:08:19] [info]服务器似乎很忙,(你可能需要增加StartServers或者Min / MaxSpareServers),产生32个孩子,有74个闲置,总共有97个孩子

Apacheconfiguration(旧configuration注释掉)

只是显示我怀疑是相关的configuration项目

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

 IfModule prefork.c
         StartServers 85
         MinSpareServers 85
         MaxSpareServers 100
         ServerLimit 100
         MaxClients 100
         #StartServers 60
         #MinSpareServers 60
         #MaxSpareServers 85
         #ServerLimit 85
         #MaxClients 85
         MaxRequestsPerChild 1000
 / IfModule

请注意,行为中的新旧configuration没有区别。

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

顺便说一下,我已经看到了安装mod-status的build议,但是我还没有弄清楚如何去做,而且如果我这样做,我不知道该找什么。

谜团已揭开。

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

背景:亚马逊每5分钟就会为您的数据库创build快照,以实现时间点恢复function。 它会在您的RDS实例上下载二进制日志来执行此操作。

每隔5分钟,二进制日志就被传输(大概是到另一个EBS),在我的情况下,传输拥塞LAN接口。 Apache每五分钟等待一次networking连接,连接就会堆积起来,最终会中止。

我把MaxClients设置为200左右

另外,我很好奇为什么最小和最大备用服务器如此之高。 我可能将MinSpareServers设置为20,将MaxSpareServers设置为30.这些是剩余的基本空闲进程的数量,apache会根据需要创build更多的MaxClients设置,并根据需求减less备用进程的数量减轻。

最后,为什么你最初创build这么多的初始服务器。 我会开始设置StartServers大约50。