| Module Info
| Add a review of Devel-Leak-Object
Superb. Does exactly what it's supposed to do with minimum fuss and maximum efficacy.
The only downside is that I now have no excuse for ignoring all my leaks.
Nice, easy to use module.
Enable it, run your program and it will list classes and object counts for live objects (i.e. not garbage collected ones) on exit.
I used it to find a memory leak in Devel::Cover. While it was simple to see wich objects were still alive, this module won't help you find out the root cause, i.e. where the circular dependencies are. But you can always just Dump one of the objects. Given the classes, you can probably figure out what a proper root object would be.
* list ref count of each class or even object, maybe limited per class, so you can see where the leak is.
This module is incredibly helpful. I've been tracking down a memory leak in Angerwhale for a while now, and wasn't satisfied with the existing tools (so I started writing my own). I saw this module on use perl, loaded it into my application like:
ANGERWHALE_EXIT_OK=1 perl -MDevel::Leak::Object=GLOBAL_bless script/angerwhale_server.pl -d
Ran a few requests against the app:
ab -n 100 localhost:3000/
And found the problem within about 30 seconds.
Turns out that scalar::defer::lazy was closing over my Catalyst model on each request and never freeing itself. So I was leaking basically my whole application on every request. Ouch. (In case you want to know how it ends, I rewrote the deferred evaluation bit with my own code, because Scalar::Defer was A Bit Too Magical For Me (tm)).
Anyway, this module gave me a good idea on what was leaking and how badly, and pointed me at the problem almost immediately. Highly recommended.