LINUX.ORG.RU

perl и bash: вопрос по скорости выполнения сценария


0

0

Есть несколько скриптов для мониторинга системы с помощью rrdtool. Скрипты написанны на perl(за основу были взяты скрипты из rrdmonitor - fronend-a к rrdtool). Cхема там такая: каждый маленький скрипт опрашивает один из компонентов(нагрузка сети, число пользователей в системе и т.п.) и заносит данные в базу rrd. Все эти скрипты вызывались из одного shell-скрипта, который запускался из cron.
Я решил оптимизировать эти скрипты. По идее из при вызове из shell-скрипта каждый раз запускается отдельный интерпретатор perl, который выполняет свой маленький скрипт. Я скопировал все маленькие файлики в один большой perl-скрипт. Я подумал, что:
- неоптимально тратить время на создание и уничтожение каждой копиии интерпретатора perl для работы всех этих маленьких скриптов
- только один раз объявляются общие для всех скриптов переменные и выполняются общие команды(такие как определения хоста).
Я сильно удевился когда после моей "оптимизации" скрипт начал работать в полтора раза медленее:

time ./cmd.sh
real 0m0.327s
user 0m0.127s
sys 0m0.119s

time ./base-all.pl
real 0m0.514s
user 0m0.308s
sys 0m0.121s

Не мог бы кто-нибудь объяснить мне почему? Где я в своих выводах ошибся?

Ты только один раз пытался запускать?
А то время-то довольно малое -- кажется, оно может вполне колебаться в таких пределах и при запуске одного и того же скрипта.
В общем по-запускай несколько раз для начала..

unDEFER ★★★★★
()
Ответ на: комментарий от unDEFER

Забыл сказать. Запускал несколько раз (около 10 для каждого скрипта)
Результат сильно не меняется :(

aleksey_t
() автор топика

время тратится на разбор всей требухи, которую вы наталкали в один файл. поэтому и тормознее.

ananas ★★★★★
()
Ответ на: комментарий от ananas

Требухи в обоих вариантах одинаково. В варианте с одним файлом даже меньше (не дублинуются многие общие части).

aleksey_t
() автор топика
Ответ на: комментарий от aleksey_t

Да бог знает какие выделения памяти этот перл производит..
Может в первом случае там каждый раз всё освобождается при завершении скрипта, а во-втором нет..
Вы бы valgrind'ом попытались это проверить..

unDEFER ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.