Qual é a melhor maneira de configurar o número de trabalhadores no Apache?

4

Meu site recebe muito tráfego por duas horas durante o dia (2000 acessos por minuto). O resto do dia recebe menos tráfego (500 acessos por minuto).  Eu tenho experimentado com os valores MaxClients e MaxSpareServers, mas ainda tenho tempo de inatividade durante as horas de peek.

Como posso calcular os melhores valores para minha configuração com base na quantidade de memória ram que eu tenho?

Cada processo é como 36-40 M de memória

             total       used       free     shared    buffers     cached
Mem:          3096        793       2302          0          0          0
-/+ buffers/cache:        793       2302
Swap:  

      0          0          0

Valores que estou usando agora

<IfModule prefork.c>
StartServers 10
MinSpareServers 22
MaxSpareServers 60
ServerLimit 90
MaxClients 90
MaxRequestsPerChild  400

UPDATE: achei isso no meu provedor de hospedagem.

link

Eu tenho o pacote extreme e usei 190 em MaxClients em vez de 200  Eu tentei por meia noite e eu recebi algumas mensagens de linha de comando de erro malloc mas usando o comando livre e tenho como 800 M na coluna livre.

    
por rbm 20.12.2010 / 16:10

10 respostas

1

Se o seu servidor sofre picos, pode ser bem porque o apache manipula o processo & criação de threads muito lentamente (no modo mpm_prefork é 1 novo subprocesso por segundo). Se você conhece suas necessidades de 'alto tráfego' (digamos que é um processo de 200), então diga ao apache para obter sempre os 200 processos prontos, mesmo se eles não fizerem nada 90% do tempo. Você estará pronto quando as pessoas entrarem.

Confira esta apresentação útil (antiga, mas legal) link !

No need for StartServers, MaxSpareServers, MinSpareServers - just MaxClients (constant pool size)

    
por 08.01.2011 / 15:41
0

A resposta depende muito do tipo de conteúdo que você está veiculando. É conteúdo dinâmico ou estático? É uma vasta gama de conteúdo ou um único documento?

Você pode usar memcached para armazenar os documentos na memória, o que permitirá que ele escala consideravelmente (eliminando um gargalo de disco), mas tudo depende de quanto você tem de RAM e se o conteúdo muda muito.

    
por 20.12.2010 / 17:02
0

É necessário testar dependendo do hardware do servidor (especialmente memória) e da eficiência do site que você está executando. O que está acontecendo quando você começa o tempo de inatividade? Você está atingindo esses limites que você definiu? Você está ficando sem memória?

    
por 20.12.2010 / 17:05
0

Você também pode querer olhar para StartServers e ServerLimit.

ServerLimit define o número máximo de servidores, limitando efetivamente os MaxClients.

StartServers define o número de servidores na inicialização. Se, por exemplo, você está na loteria ou algo em que, nessas 2 horas, todos acessam o site de uma só vez, pode ser que não seja possível gerar filhos com rapidez suficiente.

Tudo o que foi dito, realmente depende de qual é o seu conteúdo. Se é um grande script CGI ou algo assim, então o Apache tem que lidar com isso. Você pode querer olhar para a configuração da sua máquina (para referência, nós usamos para executar o burningman.com com algumas dezenas de sub-sites (quadros de avisos, galeria de imagens, etc) e enviá-lo em um único dual-p3 / 900mhz com 1GB de RAM e só atingiu os limites de software.

    
por 20.12.2010 / 17:23
0

Se você estiver em uma situação restrita de memória restrita (VPS), talvez seja necessário reduzir os maxclients padrão para evitar a morte da troca.

Se você não é, não toque nele .

Ajustar os filhos do apache é uma dessas coisas, como customizar a compilação de um kernel, onde as pessoas esmagadoramente fazem mais mal do que bem, mesmo que o dano seja apenas desperdiçar uma tarde sem nenhum benefício. Acontece que os caras do projeto do httpd no apache são muito bons no que fazem! Quero dizer, quem diria?

    
por 20.12.2010 / 17:56
0

Todo o tráfego de conteúdo dinâmico é? Você já pensou em usar o nginx na frente do apache para servir todo o conteúdo estático? Libertaria todos os trabalhadores do apache para lidar apenas com o contet dinâmico.

    
por 21.12.2010 / 03:38
0

Concordo com o que cagenut disse. Não toque realmente.

Você também pode considerar o uso de um proxy http como o Varnish ou o Squid. Mas mais uma vez, você precisa de um pouco de RAM para este também.

    
por 21.12.2010 / 03:49
0

Se você puder fazer algum benchmarking. Use o seu cerco, ele lhe dará uma idéia aproximada sobre o que o seu servidor pode manipular. Em segundo lugar, o Apache também é intensivo da CPU. Mesmo se você tivesse Gigs of RAM e uma CPU fraca, não aumentaria.

Um truque de otimização é usar um proxy reverso para o apache anterior. O nginx é um servidor leve que funciona muito bem como um proxy reverso.

    
por 21.12.2010 / 03:53
0

Você tem que garantir a memória para o sistema operacional, se você consumir toda a memória disponível, o sistema irá travar. Normalmente, o conteúdo estático usará 2/5 MB, e dinâmico 20/25 MB, você tem 36/40 MB

Então, vamos fazer algumas contas:

Memória total (em MB) / Memória total por processo = MaxClients.

Suponha que você vai reservar 512 MB para o SO, você tem 2584 MB para outros propósitos como o apache.

2584 MB / 36 MB = 71.7
2584 MB / 40 MB = 64.4

ServerLimit limita MaxClients, use o mesmo valor, mas não use números arbitrários.
Use números binários ou tente se aproximar deles com base nos seus resultados. Exemplo:

StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 64
MaxClients 64
MaxRequestsPerChild 1024

Além disso, faça o tunning do apache:

KeepAlive On
MaxKeepAliveRequests 64
KeepAliveTimeout 2

Eu tenho 1 servidor com configuração semelhante, com 3 milhões de visitas mensais.

    
por 21.12.2010 / 19:50
0

Você também pode tentar usar, e. Nginx para arquivos estáticos e, em seguida, precisam de menos processos do Apache com seu alto consumo de memória para as solicitações restantes.

    
por 31.12.2010 / 02:53