Este artigo pretende apresentar as vantagens da utilização de ferramentas de profiling no desenvolvimento de aplicações web em PHP, bem como justificar a afirmação feita no título para ele pensado: “Os 5 minutos que mudam a experiência!”.
Introdução
Frequentemente, ao desenvolvermos aplicações web, deparamo-nos com problemas de desempenho. No entanto, ao tentarmos cegamente resolver esses problemas, podemos não obter resultados concretos e estáveis. Assim, para auxiliar e optimizar o nosso trabalho, dispomos de uma técnica a que damos o nome de profiling.
O profiling consiste na utilização de ferramentas e técnicas que permitam obter dados sobre a execução do código, por exemplo: tempo de execução de cada função, linha, ou pedido, quanta memória utilizada, tempo de execução de queries, etc.
Desta maneira pode-se avaliar todo o desempenho de uma aplicação, identificar possíveis bottlenecks no código, tudo isto antes de colocar a aplicação em “produção”, permitindo assim uma optimização do código, para se obter a sua melhor performance da aplicação e se evitarem desperdícios de tempo tanto na execução como na identificação posterior dos bottlenecks e subsequente optimização do código.
Existem várias ferramentas para realizar estas tarefas. Neste artigo optei por utilizar a Xdebug, complementada por algumas outras ferramentas sobre as quais vou falando ao longo do artigo.
Ambiente utilizado:
Sistema operativo GNU/Linux, distribuição Ubuntu 10.04 LTS, a correr num PC comum, com Apache2 e respectivas mods e MySQL.
Instalação
Primeiramente instala-se o Siege, que é uma ferramenta complementar (ferramenta de teste de carrega) que me permite ver quantos pedidos por segundo a minha aplicação recebe, e quanto tempo demora a responder.
Para instalar devo primeiramente fazer o download da última versão do Siege, para a home directory, através do endereço http://www.joedog.org/pub/siege/.
Uma vez feito o download, executo o seguinte conjunto de comandos na consola, na minha home directory:
tar -xvf siege-latest.tar.gz cd siege-2.70/ ./configure make sudo make install siege.config
Ao executar o siege.config
, irá ser criado um ficheiro .siegerc
. Posso editar este ficheiro para alterar o local onde será armazenado o ficheiro de log do Siege. Caso não o faça, os ficheiros de log serão armazenados em /var/siege.log
. É recomendável colocar os ficheiros de log a serem armazenados na nossa home directory, e altamente desaconselhável executar estas aplicações como root.
Existem outras configurações possíveis e interessantes que não serão abordadas, para não estender muito o artigo. Estarão sempre acessíveis no ficheiro .siegerc
, onde podem ser activadas e desactivadas.
Uma vez instalado, utilizamos o seguinte comando, para executar o Siege durante 60 segundos com 100 ligações simultâneas (simuladas):
siege -c 100 -b -t60s http://localhost
O output deverá parecer-se com isto:
** SIEGE 2.70 ** Preparing 5 concurrent users for battle. The server is now under siege... Lifting the server siege.. done. Transactions: 491 hits Availability: 100.00 % Elapsed time: 59.70 secs Data transferred: 0.51 MB Response time: 1.02 secs Transaction rate: 4.81 trans/sec Throughput: 0.01 MB/sec Concurrency: 4.92 Successful transactions: 491 Failed transactions: 0 Longest transaction: 1.45 Shortest transaction: 0.82
O output do Siege fica armazenado no ficheiro log, o que permite que se possa ir acompanhando a evolução do desenvolvimento, bem como perdas ou aumentos de performance sempre dentro de um ambiente de testes. Também se torna útil para se compararem resultados de testes, com mais ou menos utilizadores.