Como otimizar o prefork mpm para alto tráfego?

1

Aloquei 5 GB de memória para processos do Apache.

Embora baseando-se no fato de que cada processo Apache consome em média 42,5MB, eu configurei o seguinte no meu servidor (ao calcular como se cada processo consumisse 50MB de memória):

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          100
    MaxRequestsPerChild   0
</IfModule>

Agora, para as perguntas:

  1. Como posso determinar quanto StartServers definir?
  2. Embora não seja possível definir Worker mpm (PHP etc.), o balanceamento de carga é minha melhor opção para tráfego alto?
  3. Como posso reduzir a memória de processo do Apache? meu site usa o CDN para veicular ativos para o usuário enquanto o servidor, eventualmente, atende somente a HTML.

Eu li as respostas aqui e procurei muito no Google por essas questões e não consegui encontrar nada específico o suficiente.

    
por Shahar Galukman 24.07.2014 / 14:06

1 resposta

1

Cuidado: a maioria dos processos apache compartilha a maior parte de sua memória com seus pais / irmãos. Você não pode facilmente somar os valores da memória alocada dos processos do apache. O melhor que você pode fazer: você inicia muitos processos do apache e verifica como isso muda sua memória alocada.

1: StartServers tem apenas uma importância limitada. Isso significa quantos processos filhos serão iniciados inicialmente. Min / MaxSpareServers são muito mais importantes.

2: Não consigo entender, você não disse nada sobre sua solução de balanceamento de carga. Se você quer ser capaz de lidar com alto tráfego, sua melhor opção era usar um apache de trabalho (ou até mesmo outro tipo de servidor http) para servir arquivos estáticos, e um baseado em prefork (eu sugiro que você mpm-itk) para dinâmico línguas (provavelmente para php). O trabalhador deve encaminhar as solicitações dinâmicas para o servidor baseado em prefork. Essa estrutura também é capaz de ser facilmente estendida para uma solução de cluster com balanceamento de carga.

3: MayRequestPerChild == 0 significa que os processos nunca serão reiniciados. Assim, se houver um problema com eles, eles nunca foram consertados, ou se estão vazando, isso também não será resolvido. Pode ficar tudo bem se o seu sistema é estável em termos de rock, e você está usando apenas idiomas perfeitos coletados no lado do servidor (php não é um deles!), mas acho que, por razões práticas, é melhor usar um valor inteiro grande (na maioria dos casos eu uso 100 ou 500). Cuidado: uma simples reinicialização do processo filho não é realmente cara se comparada ao seu processamento de 100 a 500 pedidos.

    
por 24.07.2014 / 14:16