2008-09-25 22 views
15

Perl kullanan bir web uygulaması üzerinde çalışıyorum ve uygulamanın bölümlerini hızlandırmak zorundayım.Perl web uygulamasını nasıl profillerim?

Araştırmak istediğim bölüm için belirli aramaları yapmaya başladığımı düşündüm. Ben profil Perl kodu üzerinde arama yaptım, ama maalesef bulduğum çoğu, komut satırından -d:DProf myapp ile perl kodumu çalıştırmam gerektiğini söylüyor. Kodum bir web uygulamasında olduğundan bu benim için pek işe yaramıyor. Ben apache ile çalışmak için profil elde etmek için bir yol buldum, ama ne yazık ki, profilerden geri gelen "en çok kullanılan" modülleri tüm CPAN modülleri vardı - Sınıf :: xyz, vs vs vs Çok yararlı değil.

"Zamanlayıcı" kodunu, bu yöntemleri hedeflemek için profillemek istediğim yöntemlere enjekte etmenin yanı sıra, iyi bir yöntem bilen var mı? Bir test senaryosu yazmayı ve bunun profil oluşturmayı düşündüm ama üzerinde çalıştığım kodun doğası gereği yapmak zorunda olduğumdan daha fazla iş gerektirecektir.

cevap

18

Apache altında çalışabilecek Devel::NYTProf (Devel :: DProf'den çok daha iyi) denediniz mi? Hangi web sunucusunu kullanıyorsunuz? Bu bir vanilya CGI betiği mi, mod_perl bir şey mi yoksa başka bir şey mi?

Veritabanı şeyler yapıyorsanız, DBI::Profile sorgunuzu başka bir programda gerçekleşen sorgulara göre değerlendirebilir.

Gerçek numara, kodun organize edilmesidir, böylece bir şeyi yavaşça bulmak için sonuna kadar bir araya getirmeden tüm test ve profil spektrumunu gerçekleştirebilirsiniz. Bu, kısa vadede yangınlarla mücadele etmek için size pek yardımcı olmaz, ancak uzun vadede şeylerin yangına dönüşmesini engeller. Web sunucusu ortamını ve benzeri yapmak için çeşitli yollar da var, ama bu farklı bir soru. :)

+0

Evet, denediğim buydu ve hepsi de tüm cpan modülleriydi.Bu spesifik yöntemleri gerçekten hedeflemek istiyorum ve çoğu zaman kendilerini nerede geçirdiklerini görmek istiyorum. – Leanan

+1

Hangi CPAN modülleri listelendi? Çok fazla veritabanı görüşmesi yapıyorsanız DBI ve DBD modüllerinin listenizin en üstünde olması oldukça olasıdır. Bunun nedeni Perl'in çok fazla iş yapması değil, DB sorgularınız yavaş olduğu içindir. Bunun yerine profil oluşturmaya başlayın. – mpeters

+1

Onlara nasıl yapılacağını açıklamıyorsanız, nasıl yapılacağını öğrenmek için birisini 'kodu düzenlemeye' tavsiyede bulunma noktasını göremiyorum. – jwg

1

Sen ile Benchmark çekirdek modülünü kullanabilirsiniz: Eğer gerçekten içten zaman şeyler istiyorsanız seçeneği hireswallclock. Ama gerçekten, komut satırından profil yapabilmelisin. Bir CGI isteğinin belirli bölümlerini öykünmek için test komut dosyaları yazmanız gerekebilir, ancak performans darboğazlarını ararken DProf'un son derece yararlı olabilir. Özellikle, kodunuzun CPAN modülü kodunu çağırdığı yeri arayın. Bunu döngülerden çok daha fazla yapıyor olabilirsiniz, bu yüzden süre CPAN modülünde harcanırken, kodunuzu yeniden kodlamak sorunu çözebilir.

10

CGI.pm kullanıyorsanız, argümanlarınızı komut satırında perl betiğine geçirebilirsiniz ve CGI.pm bunları HTTP üzerinden parametre olarak geçirilmiş gibi yorumlar. Yani hata ayıklıyorsanız, ör.

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

o zaman sadece komut satırından, örneğin dan diyebiliriz

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

1

Bence bu konuda geç bunun için biraz olduğunun farkındayım, ama bu CGI::Application kullanmak için iyi olmasının nedenlerinden veya web uygulaması sadece web çok kısa biraz olduğu başka mimarinin biridir Gerçek işlevselliği uygulamak için yazdığınız bir sürü modülden yararlanan bir kod. Böyle bir tasarıma sahip olmak, herhangi bir modülü komut satırından tek tek veya toplu olarak web yönünden endişelenmeksizin profile doğru (veya basitçe test etmeyi) kolaylaştırır.

İlgili konular