Hi, all.
I'm looking for suggestions, information, may be atricles about different memory usage issues concerned with mod_perl1.
On one Russian forum man posted an review of memory "leaks"(caveats):


sub handler
{
       my $r = shift;
       $r->send_http_header('text/plain');
       print "Hello, World!\n";
       print ttt();
       return OK;
}
sub ttt
{
   my $huge_text = 'x' x 1000000;
   my $huge_text = $huge_text . "abc" . "bcd";
   return 1;
}

1) Restart Apache
2) Start `top`
3) Request.
4) Apache eats ~4MB instead of 1....
I know that mod_perl(or may be perl) don't free memory of $huge_string because most likely it will be needed in next call, but also it take another MBs for concatenation. Why?
Above example uses ~4MB of memory and until child restart apache don't free memory.


But if I want to prevent huge memory usage I can add undef($huge_text); just before return, but undef force freeing of only 1MB. ~3MB leaks and make me use MaxRequestsPerChild... :(

It's an hypothetical example, but now we use huge system(RT from Best Practical) and without limiting requests per child we fall in apache lock down.

How to debug this situations. I want to find way how to change some calls that allow perl don't allocate additional memory. I'm looking for approaches of debuging such leaks.

Best regards. Ruslan.



Reply via email to