Profiling tools! Usar ou não usar… Os 5 minutos que mudam a experiência!

Com o Siege instalado, avançamos para a instalação do Xdebug, que além de ser uma ferramenta de debug bastante poderosa, é também uma excelente ferramenta de profiling.

Para instalar o Xdebug, executa-se o seguinte código na consola:

sudo apt-get install php5-xdebug

Agora instalado o Xdebug, é necessário proceder à respectiva configuração editando o ficheiro xdebug.ini que se encontra em /etc/php5/conf.d/. Para o fazer basta na consola introduzir o seguinte comando:

sudo nano /etc/php5/conf.d/Xdebug.ini

Existem muitos outros editores de texto em modo de texto, como o Vi, Emacs, etc. Neste caso optei por utilizar o Nano, pela sua simplicidade.

No ficheiro xdebug.ini insira as linhas que se seguem no seu final:

xdebug.show_mem_delta=On 
xdebug.trace_format = 0
xdebug.auto_trace = On
xdebug.trace_output_dir = /tmp/tests 
xdebug.trace_output_name = trace.%c.%p
xdebug.collect_params = 4 
xdebug.collect_includes = On
xdebug.collect_return = On 
xdebug.show_mem_delta = On

Esta configuração, como se pode ver, indica ao Xdebug que deve registar a stacktrace dos erros, define a localização onde deve armazenar os dados, bem como o número de parâmetros a armazenar, entre outras opções que poderão ser aprofundadas no próprio site da ferramenta Xdebug.

Terminando este passo, devemos reiniciar o httpd, neste caso o Apache, com o seguinte comando na consola:

sudo /etc/init.d/apache2 restart

Com todas estas operações concluídas apenas falta instalar uma ferramenta que nos facilite a interpretação gráfica dos dados obtidos pelo Xdebug. Existem várias ferramentas gráficas para o fazer. Neste caso vamos usar o KCachegrind. Esta ferramenta pode ser instalada executando o seguinte comando na consola:

sudo apt-get install kcachegrind

Se preferir utilizar um ambiente web pode utilizar o Webgrind que é bastante semelhante. Existe ainda uma versão para Windows: o WinCacheGrind.

O KCacheGrind permite visualizar e personalizar a forma gráfica de apresentação dos dados de profiling produzidos pelo Xdebug. Desses dados destacam-se os relativos ao consumo de recursos de cada função, de cada ficheiro, de cada método (HTTP POST e GET), de cada ligação à base de dados, e de cada query executada). As funções que se encontrem em ficheiros que sejam chamados por require(), include(), require_once(), também são registados, podendo ser visualizados de forma gráfica, nos respectivos indicadores.

O uso desta ferramenta, dado o seu nível de personalização, é preferível em detrimento do desenvolvimento de uma ferramenta nova que faça o mesmo trabalho, pois seria repetição de trabalho.

Agora bastam apenas alguns minutos para se utilizar o Xdebug em todos os ficheiros, bastando para isso, no código PHP, inserir a linha:

xdebug_start_trace();

Por exemplo:

<?php
  xdebug_start_trace();
  for ($i = 0; $i < 1000; $i++)
  {
    echo '<p>Portugal-a-Prograr !</p>';
  }
  xdebug_stop_trace();
?>

Conclusão

Estas ferramentas e esta técnica permitem testar uma aplicação durante o seu desenvolvimento, evitando assim “dissabores” quando se coloca a aplicação ou website em produção. São 5 minutos que se gastam a configurar o conjunto de ferramentas, o qual não é explorado ao seu limite neste breve artigo, mas são horas que se ganham com a sua utilização, em tempo poupado entre identificação de “engarrafamentos” e sua resolução, tempo que se poupa ao não ter o site ou aplicação offline, e tempo que não se gasta a tentar empurrar as culpas para qualquer outro programa, que não a aplicação que desenvolvemos.

Atenção: o Xdebug é desaconselhado para uso em produção. Para esse efeito, existe uma outra ferramenta (XHProf), esta sim, adequada ao uso em servidores de produção.

Referências

Publicado na edição 37 (PDF) da Revista PROGRAMAR.