Back-End

18 jun, 2010

Utilizando Xdebug para fazer profiler

Publicidade

O xDebug é uma extensão para PHP que auxilia na depuração do seu código (o próprio nome já o sugere). Porém o xDebug tem uma função diferencial, que é fazer o Profiler do código, anunciando a velocidade dos scripts e funções em geral. É uma ferramenta bem poderosa para analisar o seu código PHP e determinar as páginas que estão lentas, procurando uma solução e aumentando a velocidade de execução.

Instalação

Baixe o arquivo Xdebug 2.0.5 e instale.

Localize o arquivo “xdebug.ini”, talvez ele esteja na pasta
/etc/php5/conf.d/xdebug.ini, depois modifique esse arquivo com as
seguintes linhas:

|--------------------------------------------------------------------------------------------|
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so

xdebug.default_enable = On
xdebug.collect_includes = On
xdebug.collect_params = On
xdebug.collect_return = On
xdebug.collect_vars = On
xdebug.dump_globals = On

xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000 ; Choose a port

profiler settings

xdebug.profiler_aggregate=1
xdebug.profiler_append=1
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_name = cachegrind.out.%s
xdebug.profiler_output_dir = "/var/www/traces/"
|--------------------------------------------------------------------------------------------|

Isso fará com que o arquivo cachegrind.out.numerodaexecução
seja criado no diretório traces.
Verifique se o apache (www-data) tem permissão de criar arquivos nesse
diretório. Se não tiver, mude as permissões.

Restarte o apache.

Para gerar esse diretório, é necessário que em seu script php
seja acrescentada a variável XDEBUG_PROFILE, como por exemplo http://teste.php/?XDEBUG_PROFILE.

Essa execução criará o arquivo cachegrind.out.test no diretório
traces.

Analisando os dados

Para visualizar esse arquivo, baixe aqui a ferramenta kcachegrind
(Linux, KDE).

Se o seu sistema operacional for Windows, você poderá usar uma
ferramenta semelhante, chamada WinCacheGrind.

KCachegrind é útil em uma fase posterior do desenvolvimento de
software, chamado Profiling.

Abra o arquivo que foi gerado durante a execução do script, que
mostrará a seguinte situação:

A diferença entre “Incl.” e “Self”

Estes são atributos de custo para as funções em relação a alguns
tipo de evento. Como funções, podem chamar uns aos outros, não faz
sentido distinguir o custo do própria função ( ‘Custo Self’) e os
custos, incluindo todas as funções de chamada ( ‘Custo Inclusivo’).

‘Self’ é, por vezes, também referido como custo ‘Exclusivo’ . Assim, por
exemplo, para main (), você sempre terá um custo global de quase 100%,
enquanto o custo do auto é insignificante quando o verdadeiro trabalho
é feito em outra função.

Os valores não são medidos em segundos, muito menos em
milisegundos, são valores particulares do KCachegrind utilizados apenas
para diferenciar a quantidade de tempo utilizada em cada uma das
instruções.