Como posso monitorar a carga de um script php em um servidor?

2

Temos um site no nosso servidor dedicado que parece estar causando problemas.

Recentemente, ele está travando nosso servidor dedicado - é muito chato. Ele irá falhar em momentos aleatórios. A equipe de suporte técnico da empresa de hospedagem diz que é por falta de memória. Eles aumentaram a configuração maxclients do apache, mas sem sucesso.

Então, a última coisa que pode ser (nós removemos o mysql e as imagens do servidor) é que há um script php em algum lugar que está usando muita memória. É um site bastante popular, não pelos padrões de estouro de pilha, é claro, mas é relativamente popular.

Possivelmente há um vazamento de memória em algum lugar ou algum tipo de loop infinito criado em algum lugar ou algo assim.

Como posso identificar quais scripts estão usando mais memória?

    
por Thomas Clayson 01.11.2011 / 17:46

1 resposta

1

that it is because of lack of memory. They have increased apache's maxclients setting

Procure outro provedor de serviços.

Se você não tiver memória suficiente para atender o número atual de clientes, aumentar o número de clientes piorará o problema.

A primeira coisa é verificar se ele está registrando erros PHP corretamente (ou seja, gravá-los no servidor da Web error_log). Você pode testar isso simplesmente acessando um script (deliberadamente) mal escrito, por exemplo,

<?php
 this_fn_does_not_exist();

Os erros de falta de memória serão gravados nesse log de erros, incluindo detalhes de qual script estava sendo executado no momento e onde ele caiu.

Você também pode adicionar código para registrar detalhes do uso da memória (por exemplo, com um script de prefixo automático) em vez de esperar que ele falhe. Seria uma boa ideia implementar isto através de uma função de encerramento registada.

Isso deve lhe dar algumas prioridades para refatoração.

Enquanto isso, como um exercício separado, você deve definir uma tarefa cron para começar a registrar o registro do número de processos httpd e a quantidade de memória livre, por exemplo,

#!/bin/bash

t='date'
m='free | grep '+''
p='ps aux | grep httpd | wc -l'

echo $t $m $p >> /var/log/webload

Em seguida, faça um gráfico dos resultados para ter uma idéia de quantos clientes você pode servir com uma determinada quantidade de memória (NB, pois o bom desempenho de I / O depende do armazenamento em cache e dependendo do que está acontecendo em seu sistema) você provavelmente quer apontar para cerca de 50% de memória livre).

Isso também fornecerá um mecanismo para medir a eficácia da refatoração.

Aumentar a memória máxima disponível para cada processo PHP é simplesmente uma questão de atualizar o arquivo php.ini.

Aplique o processo usual de ajuste do PHP / webserver - ou seja, verifique o armazenamento em cache, a compactação funcionando de maneira ideal, registre e analise as consultas ao banco de dados.

NB às vezes você só precisa de mais hardware.

    
por 04.11.2011 / 12:21