Valores ideais para diretivas ServerLimit, MaxClients, MaxRequestsPerChild

27

Estou executando um site intenso de tráfego com muito conteúdo dinâmico, principalmente gerado pelo usuário.

O servidor é dedicado e tem um total de 4 processadores Intel Xeon® X3210 @ 2.13GHz. Eu preciso saber os valores ideais para as diretivas do Apache ServerLimit e MaxClients, considerando que o servidor tem 4 GB de RAM e o banco de dados MySQL é executado em um servidor separado. O painel é o DirectAdmin com o CentOS.

Abaixo estão minhas diretivas atuais, mas durante as horas de pico com mais de 5k usuários, um atraso importante é notado - e não é culpa do MySQL, porque as páginas parecem ser geradas rapidamente (eu implementei um contador de tempo de geração de página), mas é um longo atraso de conexão até que a página comece a responder e seja enviada para o navegador.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

Devo mencionar que o monitoramento do servidor usando o comando top, o uso da CPU nunca vai além de 20% ~ 30% no horário de pico. O servidor MySQL também tem um uso de 30 a 50% na época, e eu estou constantemente trabalhando na correção de consultas lentas, mas isso é um problema diferente. Eu sei que não é um gargalo DB porque as páginas estáticas também demoram muito para carregar nas horas de pico.

Qualquer sugestão para otimizar esses valores será muito apreciada, obrigado.

    
por andreszs 24.08.2009 / 21:12

3 respostas

21

Seu MaxClients é muito alto. Qual é o tamanho atual do seu processo do Apache? Multiplique isso por x 900. Isso é maior que 4 GB? Nesse caso, a máquina provavelmente entrará em swap. Eu geralmente começo com MaxClients = 2x vCPUs na caixa (grep -c processor / proc / cpuinfo). O que neste caso seria cerca de 8. Então, certifique-se de que o tamanho do processo MaxClients x apache não seja superior a 4GB.

Você pode aumentar seus MaxClients de lá, dependendo do tipo de conexão que seus clientes têm. (Usuários dial-up precisam ser alimentados com colheres, etc.) Mas certifique-se de nunca entrar em uma situação de troca.

Em seguida, defina seus servidores Min, Max e Start para MaxClients. Não há necessidade real de diferenciá-los em um ambiente de servidor dedicado.

Em seguida, faça alguns testes com ab (como notas de ganso).

    
por 24.08.2009 / 22:41
4

Você precisa obter o tamanho médio do seu processo do apache. Com este número e o tamanho total da sua RAM, você pode calcular a diretiva MaxClients. Lembre-se disso: "Um servidor da Web nunca deve ter que trocar" ( Ajuste de desempenho do Apache )

Monitoramento com top ou htop é ok, mas você precisa de uma visão melhor de todas as estatísticas de seus servidores (cpu, ram, disco i / o, solicitações apache, consultas lentas do mysql, etc ...) com alguma ferramenta de monitoramento como gânglios ou munin para encontrar possíveis gargalos.

    
por 24.08.2009 / 22:56
3

Eu recomendo brincar com a ferramenta de benchmark (ab) do apache. Você pode brincar com os valores para combiná-los com seu fluxo de tráfego e ver que tipo de respostas você está obtendo até o tempo médio de carregamento & o gosto. Nesse ponto, você pode brincar com as configurações que está falando para tentar otimizá-las. Você deve ser capaz de lidar com o desempenho otimizado para cada ajuste de desempenho.

Não seria realmente prudente falar sobre suas configurações, mas você também precisa levar em conta sua memória RAM, pois parece que você está consumindo muita memória RAM com essas configurações. Embora isso seja apenas especulação sem nenhum dado. O htop dá-lhe uma boa leitura visual dos seus recursos.

Além disso, sua média de carga pode dizer muito. Eu duvido que seu uso seja muito maior do que sua quantidade total de núcleos de 20-30% cpu, mas é outro indicador de como o seu servidor está realmente trabalhando.

    
por 24.08.2009 / 21:35