[Catalyst] Tracking down memory leaks

Bill Moseley moseley at hank.org
Wed Dec 24 18:05:05 GMT 2008


On Wed, Dec 24, 2008 at 11:47:45AM -0500, Stuart Watt wrote:
>>   
> Devel::Leak saved me several times over, but I did need to build a  
> debugging Perl to see the contents. When I did that, most of the leaks I  
> was responsible for were easy to find and fix. I just used  
> NoteSV/CheckSV in the loop, to pick up anything left from a previous  
> iteration. In the end I still found DBI and some DBDs were responsible  
> for most of my missing memory, and upgrading them took away of lot of  
> issues.

Which "loop" are you referring to?

perl -V shows -DDEBUGGING=-g

I tried using Devel::Leak but it ended up not very useful.  Perhaps using
it incorrectly.  For example, if I wrap the eval block in
handle_request() like this:

    use Devel::Leak;
    my $handle;
    Devel::Leak::NoteSV($handle);
    eval {
        if ($class->debug) {
            my $secs = time - $START || 1;
            my $av = sprintf '%.3f', $COUNT / $secs;
            my $time = localtime time;
            $class->log->info("*** Request $COUNT ($av/s) [$$] [$time] ***");
        }

        my $c = $class->prepare(@arguments);
        $c->dispatch;
        $status = $c->finalize;

        use Devel::Cycle;
        #find_cycle( $c );
    };
    Devel::Leak::CheckSV($handle);

Then I get a bunch of output like:

new 0xac62a60 : 
new 0xac62a70 : 
new 0xac62a80 : 
new 0xac62a90 : 

By a "bunch" I mean 16,979.  So, I don't quite think I'm doing it
correctly. ;)

-- 
Bill Moseley
moseley at hank.org
Sent from my iMutt




More information about the Catalyst mailing list