Desempenho do httpd degradado após passar do RHEL 5.6 para 6.1

4

Recentemente, substituímos um servidor da web do RHEL 5.6 pelo RHEL 6.1. Para ambos os ambientes, o HTTP (stock) Redhat fornecido pelo Apache httpd foi usado (por exemplo, yum install httpd). O servidor está atendendo o conteúdo do PHP e está ocupado (atendendo aproximadamente de 2500 a 4000 solicitações de páginas por minuto). As especificações de ambos os servidores são idênticas em termos de memória, armazenamento e conexão de rede. O que estamos vendo são médias de carga significativamente maiores na caixa RHEL 6.1 - onde a média de carga (às vezes) aumenta para mais de 40 (todos os processos httpd) resultando em desempenho substancialmente degradado do site. Monitoramos o ambiente RHEL 5.6 e a média de carga não excede aproximadamente 5 httpds simultâneos. Como podemos investigar esse problema? Tenha em mente que este é um ambiente de produção, mas podemos comparar "maçãs com maçãs" alternando entre o servidor 5.6 e 6.1.

    
por Patrick Rynhart 27.10.2011 / 23:31

5 respostas

2

Seus 2500 - 4000 pedidos por minuto se traduzem em 40 a 60 solicitações por segundo. Esse tipo de carga dificilmente precisa de ajuste no nível do kernel, mas é mais provável que haja algo errado com sua configuração do Apache ou do PHP. Algumas razões típicas incluem

  • Valores longos de TimeOut no httpd.conf
  • KeepAlive on e / ou long KeepAliveTimeOut valores em httpd.conf (pode levar a processos extras httpd)
  • Algum módulo httpd desnecessário carregado
  • Algum módulo PHP desnecessário carregado
  • Configurado incorretamente memcached setup (se usado)
  • Problema de conectividade / configuração do banco de dados

Você precisa descobrir o que é diferente em comparação ao seu antigo servidor. Você copiou os valores de configuração do servidor antigo para o novo? O antigo servidor foi ajustado há alguns anos e você esqueceu algo vital?

O que a página de status do servidor do Apache mostra?

Se tudo mais falhar, você sempre pode usar o módulo XDebug do PHP. Isso significa que você executa carregamentos de página em seu servidor e permite que o XDebug gere um relatório compatível com o Valgrind para você. Então você pode analisar esse arquivo com KCacheGrind ou algum outro analisador e ver onde o precioso tempo de CPU é consumido. Isso pode lhe dar uma pista sobre o que está errado.

    
por 28.10.2011 / 11:05
4

A atualização de 5.6 para 6.1 é um grande passo - você provavelmente está executando versões diferentes do apache, php e talvez também de um cache bytecode.

Se você estiver usando um cache bytecode (que eu acredito que você deveria, com o tipo de carga que você está descrevendo), você deve verificar se está funcionando (eu sei que o apc mudou alguma sintaxe de configuração entre versões, por exemplo) . Qual deles você está nesse caso usando?

Você deve ter algumas métricas explicando que tipo de tempo de CPU é gasto - se é hora do IOWait, do sistema ou do usuário. O mesmo se aplica ao uso da memória, etc. Como essas coisas parecem?

Eu recomendarei novamente algum tipo de ferramenta de monitoramento, como por exemplo o Munin.

    
por 28.10.2011 / 00:31
1

Talvez você possa comparar a saída de sysctl -A em ambos os sistemas? Você pode ter ajustado seu kernel RHEL5. Eu também achei o oprofile útil para determinar onde o kernel e os processos estão passando tempo.

Edit: Eu assumo que o apache e o php são configurados da mesma maneira.

    
por 28.10.2011 / 00:23
1

Pergunta: As duas configurações do apache são as mesmas, ou seja, você está usando invocações de encadeamento ou invocações de processo para cada solicitação?

Se você estiver usando invocações de processo, um processo será criado para cada solicitação (com alguns restantes para trás) e, portanto, um fator de carga maior.

Se você estiver usando invocações de encadeamento, um número de solicitações será tratado por encadeamentos em um número muito menor de processos.

Assim, pode não haver nada errado.

    
por 28.10.2011 / 00:24
1

Embora muito dependa do que o PHP está realmente fazendo, IMHO a média de carga parece ser bem alta mesmo na máquina antiga - mas obviamente a questão mais urgente é a diferença de comportamento entre o antigo e o novo.

Tem certeza de que as configurações são as mesmas? Você verificou os logs de erro do apache para ver se está tendo algum problema com alguma das diretivas de processamento? Você já verificou as permissões no diretório eaccelerator?

A caixa usa recursos externos (como DNS, banco de dados)? Em caso afirmativo, é na mesma rede que o antigo? Os horários do RTT para os outros servidores são similares?

Você pode facilmente fazer o downgrade da caixa para RH5.6? Em caso afirmativo, isso resolve o problema?

Você está vendo uma mudança na largura de banda ou solicitando tempos de resposta (% D)?

Worker seems to have lower memory requirements

A diferença não é tão boa assim - já que a maior parte da memória está em segmentos TXT marcados como COW. Na verdade, alguns benchmarks mostram que o pré-fork é mais escalonável do que os threads de trabalho no Linux.

    
por 28.10.2011 / 10:49