Como posso saber qual página está criando um processo httpd com alta carga de CPU?

5

Eu tenho um servidor LAMP (MediaTemple (DV) Extreme baseado em CentOS com 2 GB de RAM) executando uma combinação personalizada do Wordpress + bbPress.

Com cerca de 30 mil exibições de página por dia, o servidor está começando a reclamar. Ele tropeçou hoje cedo por cerca de 5 minutos quando houve um afluxo de tráfego. Mesmo em condições normais, posso ver que o servidor virtual às vezes tem 90% da carga da CPU. Usando Top eu geralmente vejo 5-7 processos httpd que usam 15-30% (e às vezes até 50%) de CPU.

Antes de fazermos um grande passe de otimização (nosso uso do MySQL é provavelmente o culpado) eu adoraria encontrar as páginas que são os principais ofensores e lidar com elas primeiro. Existe uma maneira de descobrir quais solicitações específicas eram responsáveis pelos processos httpd com mais CPU? Eu encontrei muitas informações sobre otimização em geral, mas nada sobre essa questão específica.

Em segundo lugar, sei que existem um milhão de variáveis, mas se você tiver alguma ideia de se devemos estar nos limites do desempenho com um único servidor virtual dedicado com um site desse tamanho, adoraria ouvir sua opinião . Deveríamos estar pensando em mudar para um servidor mais poderoso, ou deveríamos estar focados na otimização do servidor atual?

    
por Greg 25.05.2010 / 02:52

2 respostas

7

strace é uma boa maneira de começar a depurar esse tipo de problema. Tente manipular o pid de um dos processos do Apache consumindo mais CPU:

strace -f -t -o strace.output -p PID

Isso mostrará as chamadas do sistema feitas dentro desse processo. Dê uma olhada no strace.output e veja o que o processo estava fazendo. Isso pode iluminar o caminho e mostrar onde o processo está pendente. O sinalizador "-t" é muito importante aqui, pois prefixará cada linha da saída da strace com a hora do dia. Então, procure por um salto.

Por outro lado, e como você acha que o MySQL é provavelmente o culpado, eu habilitaria o log de consultas lentas, dê uma olhada nele e tente otimizar as consultas. Mais informações sobre o log de consultas lentas aqui .

Além disso, não esqueça de dar uma olhada nos arquivos de log do seu servidor.

Em relação à sua segunda pergunta, acho difícil dizer apenas com essa informação. Separar o frontend (webserver) do backend (banco de dados) é sempre uma boa prática se você tiver o orçamento para isso. Por outro lado, acho que antes de adicionar mais hardware, devemos nos concentrar em tentar otimizar o desempenho usando o hardware atual. Caso contrário, o problema provavelmente está apenas sendo adiado.

Espero que isso ajude.

    
por 25.05.2010 / 03:10
0

Experimente o The Grinder - ele ajudará você a encontrar o gargalo.

    
por 25.05.2010 / 14:54