我有一个在 mod_perl 中运行的 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;
}
这严重泄漏,并且我的请求保持有效,因此它可能会活跃数天。