
Peço desculpas antecipadamente se esta for uma questão básica, mas fiquei bastante confuso depois de ler a documentação do Apache e outros tutoriais.
Um único processo pré-fork do Apache atende todas as solicitações HTTP para um determinado cliente? Foi o que pensei, mas quando reduzo maxclients para um número baixo, o tempo de carregamento da minha página fica lento. Isso apesar de eu ser o único cliente no servidor em questão. Isso sugeriria que cada processo atendesse a uma única solicitação HTTP por vez, em vez de atender todas as solicitações dentro da janela TimeOut.
Portanto, se uma única página da Web requer 15 solicitações HTTP para carregar totalmente, preciso de 15 processos pré-fork do Apache para atendê-la de maneira ideal?
Responder1
Da maneira como normalmente pensamos sobre o protocolo HTTP, isso não deveria ser um problema.
Os navegadores modernos usammantenha vivoconexões, que só podem transportar uma solicitação por vez; nesse sentido, o uso MaxClients 1
não deve ter impacto, uma vez que cada solicitação nessas conexões é concluída antes do início da próxima.
No entanto, isso é outra coisa sobre os navegadores modernos; eles usam múltiplas conexões. Hoje em dia, você pode obter uma página HTML que requer o carregamento de outros 40 recursos; imagens, javascript, css. Do ponto de vista da eficiência, não faz muito sentido empilhá-los em um único arquivo para enviar por meio de uma conexão; em vez disso, eles são divididos em um punhado de conexões (cada uma delas ainda de arquivo único) para serem buscadas simultaneamente.
Não consigo encontrar uma boa fonte confiável de informações sobre o comportamento de cada navegador, maso que posso encontrarsugere que 6 conexões são normais. É aqui que entra em jogo a simultaneidade do seu servidor; cada uma dessas 6 conexões pode solicitar um recurso simultaneamente, agindo como 6 clientes diferentes da perspectiva do servidor.
Responder2
mpm_prefork
responderá a apenas uma conexão. Se você quiser que o Apache sirva mais de uma conexão por processo, você precisará usar um MPM multi-thread como o mpm_worker
.
Os navegadores modernos usam pipeline (várias conexões simultâneas) e keep-alive (solicitações serializadas na mesma conexão) para aumentar o rendimento e a eficiência da rede e diminuir a latência. Por exemplo, o Mozilla Firefox pode ser configurado alterando network.http.pipelining
e network.http.pipelining.maxrequests
emabout:config