Postando minha referência na SO Documentation beta, que está ficando offline.
Criação de perfil com o XDebug
Uma extensão para PHP chamada Xdebug está disponível para auxiliar na criação de perfil de aplicativos PHP , bem como na depuração em tempo de execução. Ao executar o criador de perfil, a saída é gravada em um arquivo em um formato binário chamado "cachegrind". Os aplicativos estão disponíveis em cada plataforma para analisar esses arquivos. Nenhuma alteração no código do aplicativo é necessária para executar essa criação de perfil.
Para habilitar a criação de perfil, instale a extensão e ajuste as configurações do php.ini. Algumas distribuições Linux vêm com pacotes padrão (por exemplo, php-xdebug
pacote do Ubuntu ). Em nosso exemplo, executaremos o perfil opcionalmente com base em um parâmetro de solicitação. Isso nos permite manter as configurações estáticas e ativar o criador de perfil apenas conforme necessário.
# php.ini settings
# Set to 1 to turn it on for every request
xdebug.profiler_enable = 0
# Let's use a GET/POST parameter to turn on the profiler
xdebug.profiler_enable_trigger = 1
# The GET/POST value we will pass; empty for any value
xdebug.profiler_enable_trigger_value = ""
# Output cachegrind files to /tmp so our system cleans them up later
xdebug.profiler_output_dir = "/tmp"
xdebug.profiler_output_name = "cachegrind.out.%p"
Em seguida, use um cliente da Web para fazer uma solicitação ao URL do seu aplicativo que você deseja criar um perfil, por exemplo,
http://example.com/article/1?XDEBUG_PROFILE=1
À medida que a página é processada, ela será gravada em um arquivo com um nome semelhante a
/tmp/cachegrind.out.12345
Por padrão, o número no nome do arquivo é a identificação do processo que o escreveu. Isso é configurável com a xdebug.profiler_output_name
configuração.
Observe que ele gravará um arquivo para cada solicitação / processo PHP executado. Portanto, por exemplo, se você deseja analisar uma postagem de formulário, um perfil será gravado para a solicitação GET exibir o formulário HTML. O parâmetro XDEBUG_PROFILE precisará ser passado para a solicitação POST subsequente para analisar a segunda solicitação que processa o formulário. Portanto, ao criar um perfil, às vezes é mais fácil executar curl para postar um formulário diretamente.
Analisando a saída
Depois de gravado, o cache do perfil pode ser lido por um aplicativo como o KCachegrind ou o Webgrind . O PHPStorm, um popular IDE do PHP, também pode exibir esses dados de criação de perfil .
O KCachegrind, por exemplo, exibirá informações, incluindo:
- Funções executadas
- Tempo de chamada, próprio e inclusivo das chamadas de função subsequentes
- Número de vezes que cada função é chamada
- Gráficos de chamadas
- Links para código fonte
O que procurar
Obviamente, o ajuste de desempenho é muito específico para os casos de uso de cada aplicativo. Em geral, é bom procurar:
- Chamadas repetidas para a mesma função que você não esperaria ver. Para funções que processam e consultam dados, essas podem ser as principais oportunidades para o cache do seu aplicativo.
- Funções de execução lenta. Onde o aplicativo está gastando a maior parte do tempo? a melhor recompensa no ajuste de desempenho está focada nas partes do aplicativo que consomem mais tempo.
Nota : O Xdebug, e em particular seus recursos de criação de perfil, consomem muitos recursos e diminuem a execução do PHP. É recomendável não executá-los em um ambiente de servidor de produção.