Apache 2.2 mpm_worker: mais threads ou mais processos?

17

Ao usar o MPM do Trabalhador no Apache, você pode mexer com o número de processos filho e o número de threads do servidor por processo filho.

Quais são as vantagens e desvantagens de cada um? Sob quais circunstâncias você aumentaria um ou outro?

sh-beta
fonte

Respostas:

25

Até agora, essas foram minhas principais considerações ao determinar Threads x Processos:

  1. Os threads consumirão muito menos memória residente do que Processes. Sim, com bibliotecas vinculadas dinamicamente, muita memória é compartilhada entre o processo de controle Apache e seus processos filhos, no entanto, cada novo processo precisará instanciar todos os módulos que você ativou.

    Isso é facilmente testável, comparando o uso de memória de cada Processo em que você possui, por exemplo, 5 Processos e 1 Thread cada ou 5 Processos e 25 Threads cada. No meu caso aqui, cada processo filho leva cerca de 7 MB, independentemente da quantidade de threads.

    + Para threads

  2. Leva mais tempo para iniciar em termos de tempo e ciclos de CPU para carregar um novo Processo do que um Thread. Isso pode ser testado verificando a quantidade média de páginas veiculadas por 'ab'.

    + Para threads

  3. Todos os threads de processos dependem do processo. A maior preocupação aqui é que, se algo acontecer com o processo, afetará todos os threads associados a ele. Se você estiver executando um único processo com um monte de threads, quando o processo morrer, os threads também. Portanto, mais processos causariam uma melhor separação e, portanto, uma maior tolerância a "falhas".

    + Para processos

  4. Relacionado a (3), para módulos como PHP, sua memória é carregada pelo Processo e compartilhada em todos os Threads. Isso significa que se você tiver o php com memory_limit definido como 100Mbs com 25 Threads abaixo, tecnicamente, com carga máxima, cada Thread poderá alocar um máximo de 4MB cada (é claro que isso não acontecerá assim, alguns serão monótonos, outros serão morrer de fome ).

Portanto, no final, isso realmente depende do seu caso de uso. Dito isso, você deseja maximizar a quantidade de threads usados ​​para diminuir o uso de memória e aumentar a capacidade de resposta. No entanto, você precisará equilibrar isso com uma quantidade adequada de processos para obter melhor tolerância a falhas.

Claro que não sou especialista aqui, pois recentemente tive que me preocupar com isso, então estou ansioso para ver que outras respostas podem aparecer aqui!

jonathanserafini
fonte
1
+1 para obter algumas informações gerais boas. Eu gostaria de ver mais detalhes de profundidade / concreto, se possível, no entanto.
sh-beta