Eu devo notar que eu não sou um administrador de sistemas. Você vai descobrir isso muito em breve. :)
Em poucas palavras: O Apache continua respirando durante cargas pesadas e todos os processos ficam inativos. Este é um servidor de pesquisa usado por aplicativos. As pesquisas vêm de um
lote de diferentes endpoints. De tempos em tempos (a cada 4-5 minutos), se eu estiver assistindo no topo, os processos HTTPD ficam ociosos todos ao mesmo tempo, atrasando o tráfego por 10 segundos ou mais. Em seguida, ele se recupera. O atraso é problemático.
- O servidor está atendendo muito tráfego. Estas são enquetes de aplicativos via HTTPS, não páginas da web (embora duvido que o Apache saiba a diferença)
- As pausas mencionadas acima fazem com que o tráfego fique desequilibrado: depois de algum tempo, recebo um GRUPO DE TRÁFEGO INTEIRO, depois uma trégua, depois um BROQUE DE TRÁFEGO INTEIRO
- Cada pesquisa requer um pequeno mergulho no banco de dados
Registros do Apache
Às vezes , mas nem sempre (principalmente após uma reinicialização), recebo essas mensagens em error_log. Na maioria das vezes quando isso acontece, não vejo nada no error_log.
[Mon Jun 30 17:55:17 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 31 idle, and 98 total children
[Mon Jun 30 17:55:18 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 16 children, there are 14 idle, and 98 total children
[Mon Jun 30 17:55:44 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 74 idle, and 99 total children
[Mon Jun 30 17:55:54 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 61 idle, and 99 total children
[Mon Jun 30 17:56:00 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 0 idle, and 97 total children
[Mon Jun 30 17:56:02 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 16 children, there are 36 idle, and 99 total children
[Mon Jun 30 17:56:03 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 32 children, there are 39 idle, and 99 total children
[Mon Jun 30 18:08:17 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 8 children, there are 18 idle, and 99 total children
[Mon Jun 30 18:08:18 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 16 children, there are 63 idle, and 98 total children
[Mon Jun 30 18:08:19 2014] [info] server seems busy, (you may need to increase StartServers, or Min/MaxSpareServers), spawning 32 children, there are 74 idle, and 97 total children
Apache Config (configuração antiga comentada)
apenas mostrando itens de configuração que eu suspeito serem relevantes
#Timeout 60
Timeout 20
KeepAlive on
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
Note que não há diferença entre as configurações antigas e novas no comportamento.
Ambiente
EC2, c1.medium, mod_perl, conexões de banco de dados persistentes, servidor RDS separado, nenhum erro exibido nos logs de erro do MySQL e nenhum erro nos logs do Apache
Como um aparte, eu vi sugestões para instalar o mod-status, mas eu não descobri como fazer isso, e eu não sei o que procurar se eu fizer isso.