Memtrack – Diagnóstico de Aplicações PHP

Memtrack

Memtrack – Diagnóstico de Aplicações PHP

Atenção! Essa postagem foi escrita há mais de 2 anos. Na informática tudo evolui muito rápido e algumas informações podem estar desatualizadas. Embora o conteúdo possa continuar relevante, lembre-se de levar em conta a data de publicação enquanto estiver lendo. Caso tenha sugestões para atualizá-la, não deixe de comentar!

Este artigo fala sobre o Memtrack. Perfilamento de aplicações ajudam a determinar os gargalos e possíveis problemas durante o desenvolvimento. Mas às vezes é preciso diagnosticar problemas no ambiente de produção. Frequentemente enfrentamos problemas com funções e métodos utilizando muita memória.

Se quisermos rastrear funções que estão consumindo muita memória, podemos utilizar uma extensão do PHP chamada Memtrack. Com ela podemos definir níveis aceitáveis de limite de memória e, quando alguma função ultrapassá-lo, um aviso será enviado.

Instalação e configuração do Memtrack

A Memtrack é uma extensão PECL, portanto para instalá-la é bastante simples:

pecl install memtrack

Para configurar também é bem tranquilo:

extension=memtrack.so
memtrack.enabled = 1 ; habilita a extensão
memtrack.soft_limit = int ; utilize um número para o limite de memória

Mais exemplos de configuração podem ser encontrados no manual do PHP.

Segue um exemplo de configuração:

extension=memtrack.so
memtrack.enabled = 1 ; habilita a extensão
memtrack.soft_limit = 1M ; define 1mb como limite de memória

Erro gerado

Vamos utilizar a seguinte função para “detonar” a memória:

function muitoConsumoDeMemoria() {
   $algumaCoisa = array();
   for ($i = 0; $i < 10000; $i++) {
      $algumaCoisa[] = sha1('a');
   }
   return $algumaCoisa;
}
$algo = muitoConsumoDeMemoria();

Quando essa função for executada, irá gerar um aviso no Memtrack.

[memtrack] [pid 10408] user function muitoConsumoDeMemoria() executed in PATH on line 10 allocated 1572864 bytes

Nesse log é possível encontrar informações sobre o processo, a função (nome e informações), caminho do arquivo, linha e uso de memória.

Conclusão

Com o perfilamento de aplicações é possível identificar em quais pontos a aplicação torna-se mais crítica. Assim, você pode investir seus esforços em melhorar rotinas específicas.

Espero que seja bem útil e que, a partir de agora, suas aplicações sejam otimizadas!

Um forte abraço a todos e fiquem com Deus!
Rafael Jaques

Adaptado de: http://www.leftjoin.net/2011/11/php-application-diagnostics-memtrack/