У меня есть скрипт Perl, работающий в mod_perl, который должен записывать большой объем данных клиенту, возможно, в течение длительного периода. Поведение, которое я наблюдаю, состоит в том, что, как только я что-то печатаю и сбрасываю, буферная память не освобождается, хотя я rflush
(я знаю, что ОС не может восстановить ее).
Так работает mod_perl и есть ли способ заставить его периодически освобождать буферную память, чтобы я мог использовать это для новых буферов вместо того, чтобы брать больше из ОС?
Просто чтобы уточнить, я сам не использую никаких буферов, и в моем коде нет утечек. Рассмотрим следующий простой пример:
sub handler {
my $request = shift;
my $boundary = time;
$request->content_type("multipart/x-mixed-replace;boundary=\"$boundary\";");
for (;;) {
$request->print("--$boundary\n");
$request->print("Content-type: text/html; charset=utf-8;\n\n");
$request->print("$data\n\n");
$request->rflush;
}
return Apache2::Const::OK;
}
Это сильно просачивается, и мой запрос сохраняется, поэтому он может быть активным в течение нескольких дней.