Instale e configure o XHProf (Ubuntu)

19

Problema

Estou tentando usar o XHProf, mas estou recebendo um horrível erro de php toda vez que ele é executado.

Warning: Invalid argument supplied for foreach() in xhprof_compute_inclusive_times() (line 1670 of /var/www/drupal/sites/all/modules/XHProf/xhprof.inc).
Warning: Invalid argument supplied for foreach() in xhprof_compute_flat_info() (line 1644 of /var/www/drupal/sites/all/modules/XHProf/xhprof.inc).
Warning: Invalid argument supplied for foreach() in theme_xhprof_overall_summary() (line 367 of /var/www/drupal/sites/all/modules/XHProf/xhprof.module).

O problema foi resolvido aqui porque a pasta temporária não existe, mas a minha existe.

Lado do servidor de configuração

Estou executando um novo Ubuntu Server 13.04 com o Drupal 7.

Instale o xhprof pearseguindo as instruções aqui . Também adicionei um diretório temporário ao php.ini, que criei manualmente.

extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

Configuração do Drupal

Eu tenho o devel instalado e também instalei o módulo XHProf.

Em admin/config/development/xhprof, habilitei a criação de perfil de todas as visualizações de página e solicitações de drush.

Ao seguir um link xhprof, recebo o erro acima.

insira a descrição da imagem aqui

Dominic Woodman
fonte

Respostas:

35

Bom Deus, Batman. Isso foi incrivelmente frustrante. Aqui está um guia para fazer o xhprof funcionar. (Nota: sou muito novo no Linux. Não tenho certeza se as permissões que utilizo são seguras ou se existe uma maneira melhor de fazê-lo. Só o faria em um ambiente de teste.)

IMPORTANTE: Ele não informa nada sobre como interpretá-lo. Eu não tenho idéia de como, estou feliz que funcione.

Colocando o XHProf funcionando

1. Qual sistema operacional você está executando?

Mac ou Linux?

É possível.

Janelas?

Provavelmente não. Para executar o xhprof no Windows, você precisa ter uma dll compilada. Há um link para um neste segmento , mas sempre tive problemas de compatibilidade quando tentei usá-lo no XAMPP.

Eu acho que foi compilado com uma versão diferente do Apache.

2. Fazendo funcionar no Ubuntu

É possível no Mac. Aqui estão dois links úteis:

http://www.lullabot.com/blog/article/installing-xhprof-mamp-and-php-52-mac-os-106-snow-leopard http://www.midwesternmac.com/blogs/jeff-geerling / ficando-xhprof-trabalhando-bem

Mas eu não fiz isso. Consegui fazê-lo funcionar no Ubuntu Server 13.04, embora eu ache que qualquer versão recente do Ubuntu Server funcione.

Eu configurei meu servidor no VirtualBox. O VirtualBox é gratuito, mas pode demorar um pouco para aprender como configurá-lo.

3.Instalando o XHProf

Vou assumir que temos um servidor Ubuntu totalmente funcional.

Primeiro precisamos instalar pêra. Usaremos isso para instalar o XHProf.

sudo apt-get install pear

Seguimos isso com o phpdev, que também é necessário.

sudo apt-get install php5-dev

Se esses comandos não funcionarem e eu os entendi errado, siga em frente com:

sudo pecl install -f xhprof

O Ubuntu dirá o que está faltando e fornecerá o prompt para instalá-lo. Depois de obter todas as dependências, instale o xhprof.

Você pode receber um erro ao instalar o xhprof, ele tentará baixar o beta e falhará. Nesse caso, tente:

sudo pecl install -f xhprof-beta

Espero que o xhprof esteja agora instalado.

Agora precisamos configurá-lo. Abra seu php.ini que está em /etc/php5/apache2/php.ini e adicione as duas linhas a seguir na seção de extensões:

extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"

A segunda linha define o diretório de saída. Se essa pasta não existir, será necessário criá-la. Quando você tiver feito isso, reinicie o apache usando

sudo service apache2 restart

4. Verificando se o XHProf está em execução

Agora precisamos verificar se isso funcionou.

Teste 1:

Entrar php -m

Se você vir o xhprof na lista, estará pronto. Caso contrário, não se preocupe, tente isso para verificar se está funcionando:

Vá para o seu webroot /var/www/e crie um arquivo php com apenas:

phpinfo();

Salve-o como phpinfo.php. Abra isso no seu navegador e você deverá ver as informações do PHP. Pesquise xhprof e, se vir isso, ele está sendo executado.

insira a descrição da imagem aqui

5. Como trabalhar com o Drupal

Não consegui fazê-lo funcionar com o módulo Drupal. Então, em vez disso, vou lhe dizer como fazê-lo funcionar com o módulo devel.

Primeiro algumas configurações que peguei emprestadas daqui . Eu realmente não segui essa parte, mas funciona como um cavalo de presente e tudo mais.

Crie um novo arquivo de configuração com o seguinte comando:

sudo nano /etc/apache2/conf.d/xhprof.conf

e insira o código a seguir.

alias /xhprof_html "/usr/share/php/xhprof_html/"

Em seguida, possivelmente precisamos criar um link simbólico para a nossa pasta xhprof_html. Portanto, apenas no caso de definir isso:

ln -s / usr / share / php / xhprof_html / var / www / xhprof_html

Isso criará uma pasta no seu webroot que aponta para o arquivo xhprof existente. Em seu navegador, você pode abrir http://mywebsitehere.com/xhprof para ver todas as execuções feitas.

Então reinicie o apache. Agora é hora de uma pequena configuração de desenvolvimento. Vá para as configurações de desenvolvimento, ative xhprof e defina:

xhprof directory = /usr/share/php

XHProf URL = /xhprof_html

Agora, na parte inferior de cada página, você verá um pequeno link para xhprof.

insira a descrição da imagem aqui

E clicar nele deve levar você a uma página que se parece com isso. Você Terminou. Parabéns!

insira a descrição da imagem aqui

Se isso não funcionou e você está recebendo erros de execução, provavelmente é porque o Drupal não tem permissão para gravar na pasta tmp que configuramos anteriormente, então digite:

sudo chown -R www-data /var/tmp/xhprof

E espero que funcione. Foram realizadas. Hoorah!

A menos que você queira funções gráficas. Felizmente, é tão fácil quanto:

sudo apt-get install graphviz
sudo service apache2 restart

E agora você deve ter funções gráficas. Espero que ajude!

Dominic Woodman
fonte
Uau, resposta impressionante. Pelo que vale a pena, as permissões que você usou parecem sãs.
Letharion
Sim, houve uma dor séria fazendo isso funcionar. Espero que ajude alguém (e eu daqui a dois meses, quando me esqueci).
Dominic Woodman
Grande resposta, funciona perfeitamente, thanx para aliviar a dor :-)
JurgenR
Eu não tenho /etc/apache2/conf.ddiretório. Eu fiz sudo nano /etc/apache2/conf-enabled/xhprof.confe a2enconf xhprofem vez disso
milkovsky
Obrigado pelo detalhamento. No Ubuntu 14.04, instalei os repositórios do Ubuntu em vez do PEAR e descobri que precisava executar php5enmod xhprofpara criar o link simbólico prioritário do diretório conf.d para o arquivo xhprof.ini do diretório mods-available. Outra maneira de verificar se o xhprof está ativado é executar php5-fpm -i | grep xhprof, substituindo php5-fpm por qualquer SAPI que você esteja verificando.
Mesch 11/08