Файловая операция медленнее, когда выполняется ex_perl, чем при выполнении в CGI - PullRequest
0 голосов
/ 14 июня 2011

У меня есть приложение, которое работает на CGI. Я перенес его в mod_perl2 (используя apache2 :: compat) и переписал файл cgi в обработчик mod_perl. Странно, но производительность, которую я получаю из-за mod_perl, слишком затенена задержкой в ​​журналировании.

Механизм ведения журнала в приложении похож на logger-> logmsg (msg)

регистратор :: logmsg { мой $ msg = смещение; открыть LOGFILE, ">> logfile"; распечатать LOGFILE $ msg закрыть LOGFILE; }

Приложение выполняет много журналирования и контролируется различными уровнями журналирования. Когда я отключаю ведение журнала, транзакция работает на 80% быстрее в mod_perl, чем в cgi (база кода такая же. Я просто использую обработчик для mod_perl и скрипт шлюза для cgi). когда я включаю приложение для ведения журнала на mod_perl работает на 80% медленнее.

Из журналов видно, что тот же модуль журнала занимает 0,01 секунды для добавления сообщения MSG в файл при запуске как скрипт cgi и 0,03 секунды при запуске обработчика thro mod_perl.

Я пробовал разные методы, такие как использование STDOUT и перенаправление одного и того же в файл журнала, использование метода request_obj-> log и т. Д., Но я не могу преодолеть время, затрачиваемое cgi. Есть ли что-то, что я делаю не так с этим подходом?

Почему файловая операция в 3 раза медленнее при выполнении через сценарии mod_perl на том же сервере apache.

Любой указатель высоко ценится.

Спасибо.

1 Ответ

0 голосов
/ 16 июня 2011

Это не было проблемой с самим IO файла. Был системный вызов (date +%Y%m%d) для получения метки времени, которая была в три раза медленнее, чем в cgi. Это имело замедляющий эффект.

Однако я не уверен, почему apche способен выполнять системную команду трижды быстрее при запуске через cgi, а не через modperl.

Извините за неверную информацию в вопросе.

...