Primeiro, Apache, nginx ou LightSpeed à parte - se você estiver executando um servidor com 2000 a 3000 solicitações / segundo, é hora de começar a pensar em servidores duplos e balanceamento de carga. Dependendo do que você está servindo, você pode facilmente obter mais de qualquer um desses servidores, mas a essas taxas você está servindo algo importante (ou pelo menos alto tráfego), então você quer redundância em Além da capacidade de lidar com picos de carga momentâneos. Comece a considerar seriamente uma infraestrutura de balanceamento de carga (há muitas perguntas / respostas sobre o HAProxy e coisas semelhantes aqui, e o Google também pode ajudá-lo).
Dito isso, não acredito que você tenha atingido os limites operacionais do Apache.
Você certamente pode considerar outros servidores da Web de alto desempenho (o nginx é muito popular) ou pode considerar ajustar sua configuração do Apache para obter melhor desempenho.
Algumas sugestões do Apache com base no que vejo em sua pergunta:
Antes de fazer qualquer outra coisa, leia a documentação de ajuste de desempenho do Apache .
-
MaxRequestsPerChild
é realmente útil apenas para conter vazamentos de recursos.
100 (seu valor atual) é absolutamente insano. Você está agitando processos que mata o desempenho.
0 (nunca matar uma criança) é certamente viável se tudo o que você está servindo são recursos estáticos.
10000 (dez mil, o padrão) é bom em quase todas as circunstâncias. 50000 (cinquenta mil) é o que eu uso para sites HTML estáticos puros. -
StartServers
,MinSpareServers
eMaxSpareServers
podem ser ajustados.
Eu geralmente definoStartServers
eMinSpareServers
para o mesmo valor.
Se houver um número mínimo específico de servidores sobressalentes que você deseja manter, esse é o número com o qual você deve começar. Um bom valor para isso é a sua marca d'água baixa de conexões ativas simultâneas.
MaxSpareServers
deve ser definido como 75-80% de sua marca d'água alta de conexões ativas simultâneas. -
ServerLimit
eMaxClients
possivelmente podem ser aumentados.
Se você tem muita RAM livre e muita CPU livre, aumente esses números.
Se você estiver correndo perto da saturação de recursos, deixe-os como estão. -
Use reinicializações refinadas
Você diz que está vendo "picos extremos momentâneos" em sua carga quando o Apache é reiniciado.
Isso me diz que você provavelmente não está usando reiniciações graciosas.
O que quer que esteja causando o reinício do Apache, envieSIGUSR1
para o Apache, em vez deSIGHUP
(ou proíba heaven, na verdade parando e iniciando todo o servidor). Isso é muito menos abusivo e prejudicial para o sistema do que um reinício regular de um ponto final / início. -
Considere outros MPMs
Você está quase certamente usando oprefork
MPM se estiver em um sistema Unix. br> Considere o Worker MPM em vez disso.
O ajuste para o Worker MPM é um pouco diferente -
Gaste algum cache
O Apache tem módulos de cache que podem ser usados para armazenar dados acessados com freqüência na RAM. Isso evita uma ida e volta ao disco (ou pelo menos a camada do sistema de arquivos) para dados acessados com freqüência. Configurar o armazenamento em cache suportado pela memória pode proporcionar um grande aumento de desempenho para uma quantidade relativamente pequena de memória.