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 encadeamentos do servidor por processo filho.

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

    
por sh-beta 26.05.2010 / 22:03

1 resposta

25

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

  1. Threads usarão muito menos memória residente do que Processos. Sim, com bibliotecas vinculadas dinamicamente, muita memória é compartilhada entre o Processo de Controle do 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 no qual você tem, por exemplo, 5 Processos e 1 Thread each ou 5 Processes e 25 Threads cada. No meu caso aqui, cada criança processo leva cerca de 7 MB, independentemente da quantidade de Threads.

    + Para tópicos

  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 atendidas por meio de 'ab'.

    + Para tópicos

  3. Processos Todos os processos dependem do Processo. A maior preocupação aqui é que, se algo acontecer ao Processo, ele afetará todos os Threads associados a ele. Se você está executando com um único processo com um monte de Threads, então quando o processo morre, os Threads também. Mais Processos, portanto, causariam uma melhor separação e, portanto, maior tolerância "falha" se você quiser.

    + 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 php com memory_limit definido como 100Mbs com 25 Threads abaixo, no máximo carregar tecnicamente cada Thread poderá alocar um máximo de 4MB cada (claro que isso não acontecerá dessa forma, alguns hog, alguns morrer de fome ).

Então, no final, isso realmente depende do seu caso de uso. Dito isso, você vai querer maximizar a quantidade de Threads usados para diminuir o uso da memória e aumentar a capacidade de resposta. No entanto, você terá que equilibrar isso com uma quantidade adequada de Processos para melhor tolerância a falhas.

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

    
por 28.05.2010 / 22:00