Я в процессе обновления bugzilla нашей команды до последней стабильной версии. В ранее используемом Bugzilla 2.x время загрузки веб-страниц составляло около 2 секунд, которое было принято пользователями. Однако для отображения страниц Bugzilla 4.4.8 занимает от 3 до 4 секунд. Моя проблема заключается в том, что у Perl, похоже, есть проблема с импортом необходимых модулей Bugzilla.Что заставляет перл импортировать модули очень медленно?
Я сварил проблему, проверив скрипты index.cgi напрямую с помощью perl, написав testcript.cgi, который импортирует только модули Perl Bugzilla и проверяет, что вызывает длительные промежутки времени, комментируя заявления использования один за другим ,
#!/usr/bin/perl
use strict;
use lib qw(. lib);
use Bugzilla;
use Bugzilla::Constants;
use Bugzilla::Error;
use Bugzilla::Update;
print "Content-Type: text/html\n\n";
print "<html><body>\n";
foreach (@INC){
print "$_<br>\n";
}
print "</body></html";
При отключении импорта Bugzilla время отклика сервера уменьшается до 50 мс. Я продолжал, сравнивая это с локальной установкой Perl/Apache/Bugzilla на своем ноутбуке: ~ 630 мс, чтобы отобразить приемлемую для меня страницу.
Возможное происхождение этого трудного поведения пришло мне в голову: что, если ему нужно пройти слишком много каталогов для модулей?
Solaris машина @INC:
.
lib/sun4-solaris
lib
/opt/perl-5.20.2/lib/site_perl/5.20.2/sun4-solaris
/opt/perl-5.20.2/lib/site_perl/5.20.2
/opt/perl-5.20.2/lib/site_perl/sun4-solaris
/opt/perl-5.20.2/lib/site_perl
Notebook @INC:
.
lib/i686-linux-gnu-thread-multi-64int
lib
/etc/perl
/usr/local/lib/perl/5.18.2
/usr/local/share/perl/5.18.2
/usr/lib/perl5
/usr/share/perl5
/usr/lib/perl/5.18
/usr/share/perl/5.18
/usr/local/lib/site_perl
Что вызывает это долгое время выполнения для импорта перл модулей на сервере? Как измерить время чтения ввода-вывода?
Свойства системы:
Perl 5.20.2/ Solaris 10
Update: Как было отмечено в комментариях я проанализировал сценарий с Devel :: NYTProf: Сценарий занимает большую часть времени в следующем в нескольких файлах
use Bugzilla::Install::Filesystem
use Bugzilla::Install::Localconfig
use Bugzilla::Install::Util
use Bugzilla::Auth and subroutines
use Bugzilla::User
use Bugzilla::Template
Попробуйте ['Devel :: NYTProf'] (http://search.cpan.org/perldoc/Devel::NYTProf) – dawud
Также попробуйте« Бенчмарк :: Секундомер ». –
Я не понимаю, почему я должен использовать NYTProf или Секундомер сейчас, потому что уже сейчас, какие части моего кода потребляют много времени. Мой вопрос касается причины этого расширенного времени выполнения. Я думаю, что это более системный, чем perl-связанный. –