[dancer-users] Debugging memory leaks

Andrew Beverley andy at andybev.com
Tue Mar 30 09:43:48 EDT 2021

On Mon, 29 Mar 2021 16:39:53 +0000 Zahir Lalani wrote:
> That sounds like a memory leak, but I am not sure what tools can help
> me in that regard. I assumed that Perl was quite good at cleanup, but
> something is not right here.

Have you tried to investigate whether it's a memory leak in the
application itself? I've had a few of these over the years caused by
circular references.

They're tricky to debug, but generally I use Devel::Gladiator to dump
the arena on each page request, and then compare them over time. If
it's an application memory leak then you will see the counts
consistently increasing for a particular object, which then helps to
pin down the cause. If it's a Perl internal memory leak (which is
unlikely) then the counts will remain consistent.

The other thing to bear in mind, as I understand it, is that Perl will
not release memory back to the operating system once used. It will,
however, use it itself in the future. So if you have a process that
uses a lot of memory and then releases it, the Perl process itself will
not release that memory and instead it will be used for the
application's other needs as it runs.

Finally, you can dump the contents of the running process which may
provide an insight into what is using the memory. You'll need to dump
the contents with gdb:

  gdb --pid=1234
  (gdb) gcore
  (gdb) detach
  (gdb) exit

Then see if something appears lots of times:

  strings core.1234 | sort | uniq -c | sort -nr | less


More information about the dancer-users mailing list