A instalação de um LAMP regular feito por exemplo por apt-get install lamp-server^
instalará o PHP como um módulo do Apache e puxará o MPM prefork . Por padrão, isso só começa com um número limitado de trabalhadores (garfos) para lidar com conexões de entrada. Quaisquer novas conexões simplesmente não serão processadas (embora não sejam recusadas). Então, acho que o que você está vendo é simplesmente que o "pool" de trabalhadores é pequeno para lidar com todas as conexões.
Um erro semelhante a este provavelmente estará em seus logs de erro do Apache em algum lugar ao atingir esse limite:
[error] server reached MaxClients setting, consider raising the MaxClients setting
Para configurar o prefork MPM no Apache, você pode ver os valores atuais em /etc/apache2/apache2.conf
:
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
Para alterar isso, recomendamos criar um novo arquivo em /etc/apache2/conf.d
, por exemplo, prefork-mpm-tuning.conf
e apenas "sobrecarregar" as configurações de seus padrões (e reinicie o Apache):
<IfModule mpm_prefork_module>
StartServers 20 # |-- important to increase
MinSpareServers 20 # |
MaxSpareServers 50
MaxClients 70 # too high will get you out-of-memory here
MaxRequestsPerChild 0
</IfModule>
Nota importante aqui é que o Apache só escala por segundo, começando com apenas um (codificado, não configurável) e nunca diminui a escala a menos que você o configure explicitamente. Conforme explicado na documentação do Apache sobre ajuste de desempenho :
% bl0ck_qu0te% Enquanto o último parágrafo pode se aplicar a casos gerais, acho muito confuso testar que o Apache pareça não responder após a reinicialização. Por esse motivo, minha recomendação é para aumentar a configuração StartServers
.
Então, para resumir:
- Provavelmente você deseja aumentar o
StartServers
para aceitar todas as conexões subseqüentes disparadas dos clientes. O MPM prefork do Apache não é um operador muito dinâmico - para que ele tenha um bom desempenho com muitas conexões simultâneas, você precisará simplesmente começar muito. - Permitir que aloque memória suficiente (aproximadamente 20 MB por garfo na prática). Sim, você precisará de um monte de coisas apenas para atender 100 visitantes simultâneos nesse design. (olhe para o PHP-FPM se você precisar de mais desempenho com menos memória)
- Limite o
MaxClients
para impedir que o Apache reivindique toda a memória do servidor e a trave. Faça matemática e teste aqui. - Configurar
StartServers
muito baixo para economizar memória enquanto mantém umMaxClients
maior é uma coisa ruim: seu site parecerá ser lento por um motivo por segundo e o uso da memória aumentará mais tarde de qualquer maneira. Isso acontecerá então.
Referências: