Это, похоже, интересная комбинация Apache 1.3, mod_perl 1.31, CGI.pm и Apache :: GTopLimit.
В мае прошлого года была зарегистрирована ошибка против CGI.pm
: RT # 57184
Что также указывает на то, что CGI.pm params не очищается?
CGI.pm
регистрирует обработчик очистки для очистки всего его кэша.... (строка 360)
$r->register_cleanup(\&CGI::_reset_globals);
Apache::GTopLimit
(например, Apache::SizeLimit
, упомянутый в отчете об ошибке) также имеет такой обработчик:
$r->post_connection(\&exit_if_too_big) if $r->is_main;
В pre mod_perl1.31, post_connection и register_cleanup, кажется, выталкивают в стек, в то время как в 1.31 это выглядит так, как будто GTopLimit
one перекрывает запись CGI.pm
.Так что если ваша функция GTopLimit
сработает из-за того, что процесс Apache стал слишком большим, то CGI.pm
не будет очищен, и он останется открытым для возврата тех же параметров в следующий раз, когда вы его используете.
похоже, решение состоит в том, чтобы изменить строку 360 файла CGI.pm на;
$r->push_handlers( 'PerlCleanupHandler', \&CGI::_reset_globals);
, что явно помещает обработчик в список.
Наш перезапуск Apache временно решил проблему, потому что это уменьшилоразмер всех процессов и не дал GTopLimit никаких оснований для запуска.
И мы предполагаем, что он появился за последние несколько недель, потому что мы увеличили размер процесса Apache либо за счет новых разработок, которые включали нечто, что не былот. до.
Все тесты до сих пор указывают на эту проблему, поэтому пальцы скрещены!