Pergunta

Eu estou trabalhando em uma aplicação web que usa Perl e eu preciso olhar para acelerar partes do aplicativo.

Eu pensei que eu ia começar a perfilar as chamadas particulares para a parte Desejo investigar. Eu fiz alguma pesquisa sobre perfis do código Perl, mas, infelizmente, a maioria dos que eu acho diz que eu deveria executar o meu código perl com -d:DProf myapp a partir da linha de comando. Isso não funciona muito bem para mim desde que meu código está dentro de uma aplicação web. Eu fiz encontrar uma maneira de obter o perfil para trabalhar com apache, mas, infelizmente, os "mais utilizados" módulos que voltou do profiler foram todos os módulos do CPAN -. Class :: xyz, etc etc etc. Não terrivelmente útil

Alguém sabe de uma boa maneira, além de me injetar código "timer" para os métodos Desejo perfil para direcionar apenas estes métodos? Já pensou em escrever um script de teste e de perfis isso, mas devido à natureza do código que eu estou trabalhando em que exigem um pouco mais trabalho do que eu estou esperando para ter que fazer.

Foi útil?

Solução

Você já tentou Devel :: NYTProf (muito melhor do que Devel :: DProf ), que podem trabalhar sob Apache? Qual servidor você está usando? É este um script de baunilha CGI, uma coisa mod_perl, ou algo mais?

Se você está fazendo coisas de banco de dados, o DBI :: Perfil lata referência suas consultas, o que é um trabalho acontecendo em outro programa.

O verdadeiro truque, porém, é para organizar o código para que você pode fazer o espectro completo de testes e de perfis sem ter que colocá-lo todos juntos no final para descobrir algo é lento. Isso não vai ajudar muito no curto prazo para combater incêndios, mas não impedir que as coisas se tornando incêndios no longo prazo. Há também várias maneiras de falsificar o ambiente servidor web e assim por diante, mas isso é uma questão diferente. :)

Outras dicas

Se você estiver usando CGI.pm, você pode passar argumentos para o script Perl na linha de comando e CGI.pm irá interpretá-los como se fossem passados ??como parâmetros sobre HTTP. Então se você está depuração, por exemplo.

http://example.com/scripts/example.pl?action=browse&search=grommet&restrict=blah

então você poderia simplesmente chamar a partir da linha de comando, por exemplo.

perl -d:NYTProf documentroot/scripts/example.pl 'action=browse&search=grommet&restrict=blah'

Você pode usar o benchmark módulo central com o < strong>: hireswallclock opção se você realmente quer o tempo as coisas internamente. Mas, realmente, você deve ser capaz de perfil a partir da linha de comando. Você pode ter que scripts de teste de escrita para emular certas partes de um pedido de CGI, mas DProf pode ser extremamente útil quando se olha para os gargalos de desempenho.

Em particular, olhar para onde o código está chamando o código do módulo CPAN. Você pode estar fazendo isso em loops muito mais do que o necessário, por isso, enquanto o tempo é gasto no módulo CPAN, refatorar seu código pode corrigir o problema.

Sei que é um pouco tarde para isso neste momento, mas esta é uma das razões pelas quais é bom para uso CGI :: Aplicação ou outra arquitetura em que o aplicativo web é apenas um breve trecho de código-web enfrentando que faz uso de um grupo de módulos que você escreveu para implementar a funcionalidade real. Usando um tal projeto torna muito simples para o perfil (ou simplesmente teste) quaisquer módulos da linha de comando, quer individual quer colectivamente, sem ter que se preocupar com o aspecto web.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top