Profiling Perl app memory usage

Nik Clayton nik at
Thu Feb 2 12:07:31 GMT 2006

Is anyone aware of anything that makes it easier to portably track a Perl
app's memory usage?

I've been fixing  Since the
problem was excessive memory use I needed to track down where in the app the
  memory use dramatically increased.

I ended up littering the code with sections like this:

     warn "At point foo\n";
     warn qx{ ps -o rss,vsz $$ }, "\n";

which (on FreeBSD at least) will print out the process' resident and virtual
size at various points.

This works, but is time consuming.  It also means that I can't write a test
for this.  In my ideal world my test suite would contain a 'base line'
memory profile for the application, and future test runs would then be able
to flag up any changes that I've made that significantly alter the
application's memory profile, warning me if I've done something boneheaded
again.  It would also give me a head start by showing me where in the
application memory usage started to grow.

I've figured out how to hook in to the debugger to get arbitrary code run at
each subroutine entry point [1] [2] so that's a solved problem.

What I can't see is how to (portably) determine the program's current memory

The ps(1) approach is simple, but non-portable.

I'm aware of Devel::Peek::mstat(), but that needs to run under a Perl
configured with Perl's malloc (which might not be the case on the
'production' Perl, so the memory footprint stats may not be comparable), and
the Perl needs to be built with a specific debugging flag.  I also (and this
may be down to me not groking the docs) am unsure how I'd use ::mstat() to
get the RSS and VSZ figures.

Walking through CPAN modules that match /devel/i and /prof/i I can't see
anything that can reliably extract this information.

Anyone know of anything, or can suggest an approach?




More information about the mailing list