[Catalyst] Tracking down memory leaks
Bill Moseley
moseley at hank.org
Wed Dec 24 16:23:15 GMT 2008
What are some good methods for tracking down memory leaks? I used
Devel::Cycle on $c in handle_request() to find one leak. But, I
suspect I've got a circular reference elsewhere still by the size of
my processes after a while. (Processes start out showing 70MB and end
up at 140MB rss -- which includes shared memory, of course).
I'm also curious about seeing an increase in "rss" memory in a
very simple Catalyst application. Could be my testing, or 5.10.0 on
this machine.
$ perl rssmem.pl
Start Rss : 7444
After one request Rss : 9592
Request 1000: Rss: 9636
Request 2000: Rss: 9696
Request 3000: Rss: 9756
Request 4000: Rss: 9816
Request 5000: Rss: 9880
It's not that significant, and I think I restart my processes after 1000
requests.
$ cat rssmem.pl
use strict;
use warnings;
use HTTP::Request::AsCGI;
use Catalyst::Utils;
use Linux::Smaps;
my $smap = Linux::Smaps->new( $$ );
App->setup;
print 'Start Rss : ', $smap->rss, "\n";
my $r = make_request();
my $before = $smap->all;
$smap->update;
print 'After one request Rss : ', $smap->rss, "\n";
for ( 1 .. 5000 ) {
make_request();
next if $_ % 1000;
$smap->update;
print "Request $_: Rss: " . $smap->rss,"\n";
}
sub make_request {
my $request = Catalyst::Utils::request( '/ping' );
my $cgi = HTTP::Request::AsCGI->new( $request, %ENV )->setup;
# Uncomment and no gain in rss.
#return;
App->handle_request;
return $cgi->restore->response;
}
package App;
use strict;
use warnings;
use Catalyst;
sub ping : Local {
my ( $self, $c ) = @_;
$c->res->body( 'ping' );
}
--
Bill Moseley
moseley at hank.org
Sent from my iMutt
More information about the Catalyst
mailing list