mod_perlで実行されているPerlスクリプトがあり、クライアントに大量のデータを、場合によっては長期間にわたって書き込む必要があります。私が観察する動作は、何かを印刷してフラッシュすると、バッファメモリが再利用されないことですrflush
(これはOSによって再利用できないことを知っています)。
それはmod_perlの動作方法であり、定期的にバッファメモリを解放するように強制して、OSからより多くを取得する代わりに、新しいバッファに使用できるようにする方法はありますか?
明確にするために、私は自分でバッファを使用しておらず、コードにリークはありません。次の簡単な例を考えてみましょう。
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;
}
これはひどくリークし、私のリクエストは存続しているので、何日もアクティブになる可能性があります。