Existem muitas causas possíveis. Há quase certamente não apenas um único motivo.
Algumas possibilidades:
- O site está sendo executado sob algum mecanismo de agrupamento como FastCGI, mod_php / mod_perl / mod_python etc. Se esses ou o Apache não estiverem configurados para manter um pool mínimo de servidores, eles precisarão reiniciar o aplicativo quando uma nova solicitação chegar e não há servidores disponíveis com esse aplicativo já carregado.
- O aplicativo usa um pool de conexões com o banco de dados. O mesmo problema acima, exceto que é a conexão do banco de dados que precisa ser restabelecida. Alguns bancos de dados relacionais podem ser muito lentos na abertura de uma nova conexão (muita sobrecarga)
- Vários mecanismos de armazenamento em cache (para sites de alto desempenho que executam balanceadores de carga ou caches como o memcached) ao longo do caminho podem precisar atualizar suas informações diretamente do site se as informações que tiverem forem obsoletas. Também poderia se aplicar ao cache local do seu navegador: embora ele normalmente possa ignorar todos os arquivos estáticos adicionais em um site como css, js, imagens, uma vez que estes expirem do cache, ele precisa buscá-los novamente.
- Os sites podem ter atividades de manutenção, como backups que ocorrem quando a carga é baixa e o site não está sendo acessado.
- Pode até ser tão baixo quanto o cache de disco do sistema operacional do servidor, que pode ter seu cache preenchido com outros sites no mesmo servidor, empurrando a versão em cache do site que não foi acessado por algum tempo (exatamente o que o cache de disco deve fazer, armazene em cache arquivos usados com freqüência, não usados com pouca freqüência). O atraso que isso deveria causar provavelmente seria muito pequeno e não perceptível para um ser humano.
As estratégias de mitigação dependem, é claro, da causa real. Mas algumas coisas que normalmente devem ser feitas:
- Verifique se os parâmetros MinSpareServers / MinSpareThreads do Apache e outras configurações de desempenho estão configurados corretamente. Tente entender como, quando e porque o Apache gera mais servidores / threads.
- Verifique se os servidores de aplicativos, como o FastCGI, também estão configurados corretamente para manter um pool suficiente disponível.
- Configure corretamente o pool de conexões com o banco de dados ou mantenha uma conexão de banco de dados persistente sempre aberta.
- Garanta que todos os seus arquivos incluídos (css, js, etc) sejam armazenados em cache e tenham tempos de expiração razoáveis.