Descobre quais as páginas que causam o carregamento?

4

Normalmente não sou um administrador de sistema, mas tenho um servidor de produção sob carga pesada (que serve algumas páginas php básicas e alguns arquivos de redirecionamento do php que têm algumas consultas sql e nenhuma imagem) que fica travando. Especificamente, a carga chega a cerca de 20 e solicita tempo limite. Não há nada no log de acesso do apache ou no log de erro indicando atividade incomum, mas o gráfico de E / S de disco mostra picos de leitura / gravação que se correlacionam com o tempo de inatividade.

Eu sei que é uma combinação dessas páginas e algumas centenas de milhares de acessos por hora, mas estou perplexo e não sei quais ferramentas usar. Eu preciso ver A) Quantos acessos por segundo / minuto / hora essas páginas estão recebendo e B) Quanto tempo leva para servir cada página. O que está disponível para criar um perfil de um servidor ativo sob carga? O que é melhor?

O servidor é apache2, php5, ubuntu hardy. Qualquer conselho é muito apreciado.

EDITAR:

Obrigado pelas ideias. Eu poderia editar o PHP, mas estas são páginas que os designers estão mudando frequentemente, eles gostam de copiar / colar / apagar coisas, e eu estava esperando encontrar algo melhor do que duto para isso porque é um problema recorrente em muitos de nossos servidores.

Não existem pacotes de software para monitorar a carga do servidor por arquivo nos servidores de produção? Eu tenho que recorrer a ferramentas de depuração e perfil por segmento de código? Se o meu servidor já está engasgando com acertos, não adicionaria o XDebug regiamente no meu S @ ^ &?

    
por linkedlinked 13.11.2009 / 19:10

5 respostas

1

Você pode experimentar o modlogslow do módulo do Apache para obter medidas do período usado para processar cada solicitação pelo processo atual .

    
por 15.11.2009 / 14:05
1

A primeira coisa mais fácil de tentar seria identificar os arquivos PHP mais "populares" solicitados.

Você pode fazer isso examinando o (s) arquivo (s) access.log do Apache, ou usando algo como apachetop em tempo real (embora ele também dependa de arquivos de log).

Você pode examinar o status do servidor Apache usando mod_status - ele também mostrará o que exatamente é usando ciclos de CPU do Apache. Há muitas informações disponíveis sobre como usá-lo para identificar solicitações intensivas de CPU.

Depois de ter uma lista de "candidatos para otimização", você pode realmente usar o XDebug individualmente em cada um.

Como uma opção mais simples, você poderia instalar o xcache ou o APC ou qualquer outro software de cache do PHP. Isso acelera significativamente a execução de scripts PHP.

    
por 13.11.2009 / 22:11
0

Você deve experimentar o recurso de criação de perfil do Xdebug. Você pode instalá-lo como um módulo e, em seguida, ativar a criação de perfil para criar o arquivo de perfil. Após coletar dados, você pode usar o WinCacheGrind ou algum outro Valgrind processamento para ver onde seu tempo está sendo gasto. Existem outras opções para perfil do PHP também.

    
por 13.11.2009 / 19:31
0

Com relação a "A) Quantos acessos por segundo / minuto / hora essas páginas estão recebendo" - essas informações estarão nos registros e praticamente qualquer analisador de registros e / ou pacote de estatísticas de análise da Web examinará isso para você. Os comuns / OSS estão listados aqui .

Por "B) Quanto tempo leva para servir cada página." - isso também pode ser incluído nos logs se você usar um formato de log personalizado, embora tenha que verificar a documentação da ferramenta de análise de logs que você escolheu para ver se ela oferece suporte a essas informações extras. Tenha cuidado ao usar essa figura para inferir coisas sem outros fatos que estejam fazendo o backup da inferência, já que o tempo obviamente será afetado por outra carga no sistema, bem como a carga imposta por ele mesmo.

Uma das fontes mais prováveis de problemas na circunstância que você descreve é o banco de dados. Você não diz qual é o servidor de banco de dados que está usando, por isso não podemos ser mais específicos aqui, mas você descobrirá que a maioria dos bancos de dados permite o registro de consultas longas que você pode usar como o campo de registro "tempo necessário" do Apache. lugares para procurar oportunidades de otimização. Procure especificamente por consultas que executam varreduras de tabela em grandes conjuntos de dados.

A outra possibilidade principal é simplesmente um excesso de atividade que sua máquina não é alta o suficiente para lidar com isso - você deve ver isso se for o caso usando um analisador de log do Apache. Se você obtiver um excesso repentino de tráfego, isso pode resultar em processos extras do Apache sendo iniciados e em muitas consultas extras ao banco de dados. Em ambos os casos, isso pode resultar em muita atividade de E / S devido ao acesso ao banco de dados ou à troca, se os processos extras empurrarem a máquina além do que pode caber na RAM. Vale a pena olhar para o uso da memória e trocar de atividade durante um dos pontos mais movimentados, se você não puder pegar um no momento em que isso acontecer, deixe um registro no local para que você possa rever o que aconteceu depois do fato. Eu uso collectd para tal monitoramento (existem outras opções com recursos similares se o collectd não for do seu agrado), bem como os parâmetros do sistema de monitoramento Assim como o uso da CPU, E / S e uso da memória + swap, ela também possui módulos para registrar propriedades específicas do Apache e mySQL / postgres que podem ser úteis. Você afirma que já possui um gráfico de E / S que implica que uma solução como essa já está instalada - você pode verificar quais opções de registro de propriedade possuem, especificamente se ele pode distinguir entre E / S e partições de onde seus dados são E / S causada por atividade de troca.

Se o problema de atividade for o problema, talvez você precise de mais RAM, um melhor subsistema de E / S ou ambos, para atender ao pico de carga do site - embora possa haver locais em seu código ou design de banco de dados em que a otimização também ajudaria, especificamente, melhorando a indexação de seus dados no banco de dados se varreduras de tabela completas estiverem sendo executadas onde elas não deveriam ser necessárias) e você poderia considerar certas técnicas de cache para reduzir o número de vezes que o conteúdo dinâmico é reconstruído a partir do zero.

    
por 14.11.2009 / 00:06
0

Existe uma maneira fácil de adicionar e anexar scripts automaticamente a todos os arquivos php: link

Basta iniciar um cronômetro no arquivo anexado, interrompê-lo e registrar o tempo de execução no arquivo anexado.

Ao utilizar esta técnica, você não terá que se incomodar com o fato de outros desenvolvedores / designers sobrescreverem seu código.

    
por 15.11.2009 / 01:54