Memtrack – Diagnóstico de Aplicações PHP

Memtrack

Memtrack – Diagnóstico de Aplicações PHP

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/

  • Raffael B. Martins

    Bom dia Rafael, existe algum limite para utilização do Memtrack? Ou depende de função para função?
    Digo, algum limite “ideal”.

    • http://www.phpit.com.br/ Rafael Jaques

      Olá Raffael.
      Não entendi exatamente o que você quis dizer com "limite".
      Seria limite de utilização, de memória, de requisições? Do que exatamente?