2016-02-03 3 views
-1

У меня есть программа perl (/usr/bin/ckbcomp), выполняющая очень медленно на только что установленном сервере debian v8. Я нашел его, отлаживая его очень длительное время загрузки.Очень медленное время выполнения скрипта perl

Я сравнил выполнение этого же скрипта на другом сервере, у которого нет этой проблемы, и я закончил с результатом, что они имеют точное выполнение пространства ядра и что проблема, похоже, исходит из кода пользовательской лицензии, Perl.

# slow execution 
$ uptime 
14:54:16 up 3:19, 1 user, load average: 0.00, 0.01, 0.05 
$ time ckbcomp -backspace bs -model pc105 us 
real 0m1.927s 
user 0m1.900s 
sys  0m0.016s 

# normal execution 
$ uptime 
14:49:31 up 12 days, 17:19, 1 user, load average: 0.00, 0.03, 0.09 
$ time ckbcomp -backspace bs -model pc105 us 
real 0m0.381s 
user 0m0.376s 
sys  0m0.000s 

Вы можете увидеть, сколько времени занимает пользовательское пространство. Выход strace в основном тот же, и подтверждает вывод time (такое же количество системных вызовов, одинаковые накладные расходы и почти то же время, что и в пространстве ядра). uptime используется для отображения нагрузки процессора, поэтому это не проблема с перегрузкой.

Поэтому я предполагаю, что проблема связана с выполнением самого perl, и ltrace в основном подтверждает это, давая 1.710485 seconds, проведенный в perl_run().

Я понятия не имею, как дальше отлаживать программу perl на debian v8. Решение, подобное буквой, должно быть достаточно хорошим, чтобы понять, где потрачено время.

Perl-интерпретатор на обеих машинах одинаковый. Может быть, это происходит от установленных библиотек ...

Спасибо за вашу помощь

+1

Google «perl profiler» и посмотрите на некоторые пакеты профилирования там для perl ... –

+0

не может быть проблемой аппаратного обеспечения? Удачи. – shellter

ответ

3

Ну, я не могу ответить прямо, потому что у меня нет этого сценария в моей системе.

Однако в целом - вы должны смотреть на этот perl и видеть, что он делает.

Я бы взял в качестве стартовой точки - strace как вы упомянули это уже. strace -fTt будет следовать за вилками, поэтому также должны сообщать о том, что syscalls также делает perl.

Однако, если это не делает трюк - Devel::NYTProf сможет рассказать вам о том, как работает ваш код и что он делает (и где он проводит время). Запустите это, затем проверьте биты кода, которые вяли.

Смежные вопросы