Estabilidade do Apache em um servidor de tráfego muito alto

5

Portanto, tenho um cliente com um servidor de largura de banda muito alto. Os hits são muito leves em termos de demanda - jpeg e texto estáticos.

ESPECIFICAÇÕES DO SERVIDOR:

  • Dual Quad-Core L5520 2,26 gHz (3,2 Turbo & HT) 8 MB de cache
  • 72 GB de RAM
  • 2 SSD de 300 GB (1 dedicado a / usr para acompanhar o registro)
  • Porta de 100 Mbps (sem medidor) em um datacenter de grande reputação

Atualmente, tenho o Apache configurado da seguinte forma:

  • Iniciar servidores 512
  • Servidores de reserva mínimos 256
  • Máximo de Sobressalentes 512
  • Limite de servidor 7500
  • Máx. clientes 7500
  • Max Requests por criança 100
  • Tempo de espera de ativação 5
  • Solicitações Max Keep Alive 768
  • Tempo limite 30

Eu estava vendo cerca de 2000-3000 acessos por segundo do apache na semana passada sem problemas. Isso traduziu a 80-90Mbps para cima e uma carga em torno de 1 com picos em torno de 5 e picos extremos momentâneos de 30-50 quando o apache reiniciou e todos os processos reapareceram. O uso da memória foi de cerca de 40 GB. O tráfego aumentou e agora estou vendo de 3000 a 4000 acessos por segundo e o http está instável. Embora o apache esteja ocasionalmente reiniciando, estou obtendo períodos sem conectividade http enquanto o apache está em execução e há usuários ociosos e slots abertos. A carga é de cerca de 2 quando está estável e freqüentemente cravada, o que sem dúvida é o problema de conexão, mas não sei por quê. O uso de RAM é de 50 a 60 GB. O rendimento é de cerca de 130 Mbps. (Não tenho certeza de como estou obtendo mais de 100Mbps quando meu pacote é de 100Mbps, mas tenho um ticket com o DC agora para saber se eles estão descartando pacotes como resultado do meu uso, mas isso não • Explicar meus problemas de estabilidade, a menos que os ack's caiam e deixem conexões para o tempo limite ... talvez ... não tenho certeza ... nunca pensei sobre a teoria por trás desse pensamento até agora)

Estou procurando opiniões sobre se cheguei ao máximo operacional do que o apache pode manipular ou se existe algum outro limite de sistema que eu possa exceder.

Algumas pessoas me disseram que o LiteSpeed é a solução, mas eu não tenho experiência com ele, e meu cliente já ouviu coisas ruins, então opiniões também são apreciadas.

Obrigado a todos!

    
por voretaq7 08.11.2013 / 18:51

1 resposta

8

Primeiro, Apache, nginx ou LightSpeed à parte - se você estiver executando um servidor com 2000 a 3000 solicitações / segundo, é hora de começar a pensar em servidores duplos e balanceamento de carga. Dependendo do que você está servindo, você pode facilmente obter mais de qualquer um desses servidores, mas a essas taxas você está servindo algo importante (ou pelo menos alto tráfego), então você quer redundância em Além da capacidade de lidar com picos de carga momentâneos. Comece a considerar seriamente uma infraestrutura de balanceamento de carga (há muitas perguntas / respostas sobre o HAProxy e coisas semelhantes aqui, e o Google também pode ajudá-lo).

Dito isso, não acredito que você tenha atingido os limites operacionais do Apache.
Você certamente pode considerar outros servidores da Web de alto desempenho (o nginx é muito popular) ou pode considerar ajustar sua configuração do Apache para obter melhor desempenho.

Algumas sugestões do Apache com base no que vejo em sua pergunta:

Antes de fazer qualquer outra coisa, leia a documentação de ajuste de desempenho do Apache .

  1. MaxRequestsPerChild é realmente útil apenas para conter vazamentos de recursos.
    100 (seu valor atual) é absolutamente insano. Você está agitando processos que mata o desempenho.
    0 (nunca matar uma criança) é certamente viável se tudo o que você está servindo são recursos estáticos.
    10000 (dez mil, o padrão) é bom em quase todas as circunstâncias. 50000 (cinquenta mil) é o que eu uso para sites HTML estáticos puros.

  2. StartServers , MinSpareServers e MaxSpareServers podem ser ajustados.
    Eu geralmente defino StartServers e MinSpareServers para o mesmo valor.
    Se houver um número mínimo específico de servidores sobressalentes que você deseja manter, esse é o número com o qual você deve começar. Um bom valor para isso é a sua marca d'água baixa de conexões ativas simultâneas.
    MaxSpareServers deve ser definido como 75-80% de sua marca d'água alta de conexões ativas simultâneas.

  3. ServerLimit e MaxClients possivelmente podem ser aumentados.
    Se você tem muita RAM livre e muita CPU livre, aumente esses números.
    Se você estiver correndo perto da saturação de recursos, deixe-os como estão.

  4. Use reinicializações refinadas
    Você diz que está vendo "picos extremos momentâneos" em sua carga quando o Apache é reiniciado.
    Isso me diz que você provavelmente não está usando reiniciações graciosas.
    O que quer que esteja causando o reinício do Apache, envie SIGUSR1 para o Apache, em vez de SIGHUP (ou proíba heaven, na verdade parando e iniciando todo o servidor). Isso é muito menos abusivo e prejudicial para o sistema do que um reinício regular de um ponto final / início.

  5. Considere outros MPMs
    Você está quase certamente usando o prefork MPM se estiver em um sistema Unix. br> Considere o Worker MPM em vez disso.
    O ajuste para o Worker MPM é um pouco diferente

  6. Gaste algum cache
    O Apache tem módulos de cache que podem ser usados para armazenar dados acessados com freqüência na RAM. Isso evita uma ida e volta ao disco (ou pelo menos a camada do sistema de arquivos) para dados acessados com freqüência. Configurar o armazenamento em cache suportado pela memória pode proporcionar um grande aumento de desempenho para uma quantidade relativamente pequena de memória.

por 08.11.2013 / 23:28