PHP Profiler com xdebug e webgrind

Um dos principais fatores à se levar em consideração no desenvolvimento de um software é o desempenho, principalmente se houverem muitos acessos. A maioria dos desenvolvedores acabam deixando de lado uma ánalise mais profunda do desempenho da aplicação e isso gerá insatisfação e incomodo para o usuário final. Com a utilização principalmente de frameworks MVC e programação orientada a objetos, nossas aplicações PHP ganham bastante em qualidade, facilidade em manutenção e reutilização de código, porém teremos uma redução na parte de desempenho. O objetivo de nossa ánalise aqui é poder mostrar à você como podemos fazer para identificar gargalhos nas aplicações e agir em cima desses pontos mais lentos afim de melhorar o desempenho. Para ajudar na análise vamos utilizar a combinação xdebug + webgrind.

Xdebug

Xdebug é uma extensão do PHP com a finalidade de nos ajudar a debugar mais detalhadamente nossos scripts. Iremos abordar mais especificamente o Xdebug Profiler. O profiler do xdebug é uma poderosa ferramenta de geração de dados estatísticos com a finalidade de identificar gargalos, ajudando o desenvolvedor na árdua tarefa de melhorar o desempenho de suas aplicações. Os dados são gerados em um formato de arquivo compatível com cachegrind. Portanto além do xdebug precisamos instalar um programa que nos ajude à analisar os dados gerados no formato do cachegrind. As principais opções desse tipo de software que temos são o KCacheGrind e Webgrind. Neste artigo vamos explicar como instalar e configurar o Webgrind que é uma ótima opção disponível.

Instalando xdebug no Linux Ubuntu:

Para habilitar o profiler do xdebug no PHP é bem simples. Primeiro instale a extensão do xdebug:

$ sudo apt-get install php5-xdebug

Edite o arquivo:

$ sudo vim /etc/php5/apache2/conf.d/xdebug.ini

Insira a seguinte configuração:

zend_extension=/usr/lib/php5/20090626/xdebug.so
xdebug.profiler_enable = 1
xdebug.profiler_output_dir = /log/xdebug

A primeira linha é caminho onde esta localizado o arquivo referente à extensão xdebug.
A segunda linha habilita o profiler do xdebug que é o que nos interessa.
A terceira linha define o caminho onde os arquivos de saída do xdebug serão gerados. O PHP deve ter permissão para escrever neste diretório:

$ sudo chown www-data /log/xdebug

Reinicie o Apache:

$ sudo /etc/init.d/apache2 restart

Neste nomento o xdebug deve estar habilitado e gerando o log no diretório /log/xdebug. Para verificar se a extensão foi instalada corretamente, crie um novo arquivo php com a função phpinfo() e procure pela seção xdebug para se certificar que a extensão esta corretamente instalada.

Vamos agora à instalação do Webgrind.

Instalando WebGrind

Precisamos de um software que nos ajude a analisar os logs gerados pelo xdebug. O nosso escolhido é o webgrind. Segue abaixo os detalhes de como instalar o webgrind.

A instalação é bem simples. Basicamente é baixar o arquivo zip de instalação, descompactar ele dentro do documentroot de seu servidor web (É necessário que ele seja descompactado dentro de algum diretório que possa ser acessado através do seu domínio web):

$ cd /var/www
$ sudo wget http://webgrind.googlecode.com/files/webgrind-release-1.0.zip
$ unzip webgrind-release-1.0.zip

Configurando o Webgrind

O webgrind necessita de uma configuração inicial para poder funcionar corretamente. Edite o arquivo config.php dentro do diretório do webgrind. Configure as seguintes opções:

  • $storageDir – Caminho para diretório onde o webgrind irá armazenar arquivos cachegrind já processados. Este diretório deve ter permissão de escrita do usuário do apache/php.
  • $profileDir – Caminho para o diretório onde estão os arquivos de log gerados pelo xdebug. Por padrão o caminho utilizado é o especificado na diretiva xdebug.profiler_output_dir. Porém caso não tenha o xdebug instalado no mesmo servidor do webgrind você deverá especificar o caminho correto para essa opção.
  • $defaultTimezone  – Configure corretamente o fuso horário da sua região. No meu caso, foi definido para ‘America/Sao_Paulo’. Para ajudar à verificar corretamente o nome do fuso horário da sua região acesse o link http://php.net/manual/en/timezones.php

Exemplo arquivo config.php:

static $storageDir = '/webgrind';
static $profilerDir = '/log/xdebug';
...
static $defaultTimezone = 'America/Sao_Paulo';
...

Neste momento o webgrind já pode ser acessado:

http://localhost/webgrind

Tela Webgrind

O webgrind disponibiliza informações detalhadas à respeito das requisições realizadas em sua aplicação php, como por exemplo:

  • Se o tempo esta sendo gasto em funções internas ou em funções definidas pelo usuário.
  • Exibe de onde as funções são chamadas e quais funções elas estão chamando.
  • Gerenciar o tempo gasto exibindo no formato “Total Self Cost” e “Total Inclusive Cost”. “Inclusive Cost” é o tempo gasto dentro da função + chamadas para outras funções.

É importante utilizar o webgrind por algum tempo até se familiarizar com ele. Através dele consegui facilmente identificar pontos na aplicação que poderiam ser melhorados. Conheciumento pelo menos em nível intermediário em php é necessário.

Boa sorte!

Please follow and like us:

Comments

  1. By fflush

  2. By Jhonata Menezes

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: