나는 많은 양의 데이터를 클라이언트에, 아마도 오랜 기간 동안 작성해야하는 mod_perl에서 실행되는 Perl 스크립트를 가지고있다. 내가 관찰 한 동작은 일단 내가 인쇄하고 플러시를하면, 내가 rflush
(나는 이것이 OS에 의해 다시 회수 될 수 없다는 것을 알고 있음)이지만 버퍼 메모리는 회수되지 않는다는 것이다.mod_perl에 버퍼 메모리를 다시 사용하도록 할 수있는 방법이 있습니까?
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; }
이 누수가 많이 발생하고 요청이 활성 상태로 유지되어 며칠 동안 활성화 될 수 있습니다. –