Почему загрузка моего модуля Perl в mod_perl приводит к зависанию Apache? - PullRequest
3 голосов
/ 18 марта 2009

У меня есть программа mod_perl, которая реализует свою собственную функцию-обработчик (т.е. она не использует Apache :: Registry).

У меня есть модуль парсера, написанный с использованием Parse :: RecDescent.

Я успешно использую модуль синтаксического анализа в другой подобной программе mod_perl в течение нескольких месяцев без проблем.

Простое «использование» модуля синтаксического анализатора в моей новой программе mod_perl (т.е. никаких ссылок на функции в модуле) приводит к тому, что сервер Apache порождает дочерние процессы, пока не достигнет своего максимального предела. Комментирование оператора «use» решает проблему (но, очевидно, оставляет меня без парсера).

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

У кого-нибудь есть подсказки для меня? Я в растерянности.

- фил -

Ответы [ 2 ]

1 голос
/ 18 марта 2009

Итак, я решил проблему, но не понимаю, почему это сработало. Это немного расстраивает меня, но я рад, что проблема исчезла.

Прежде чем я принял предложение Дероберта и проследил процесс, я решил перенести загрузку библиотеки в файл запуска mod_perl и вуаля, проблема решена.

Интересно, что мне потребовался целый день работы, чтобы добраться до точки, где я достаточно понял проблему, чтобы задать вопрос по SO, а затем, как только я дошел до этой точки, простая вещь решила ее.

1 голос
/ 18 марта 2009

У меня нет ответа для вас (лично я использую fastcgi ...), но я могу предложить подход: присоединить strace, ltrace, gdb и т. Д. К дочернему процессу apache и посмотреть, где он висит. Вам может понадобиться пересобрать apache, mod_perl и даже perl с символами отладки, чтобы получить разумный вывод из gdb.

...