in reply to memory (leaks and management)

There's some advice from the book "Practical mod_perl" which applies to any situation with a long-running perl interpreter. It may help.

In general, growth in a perl program does not indicate a leak. Perl uses a lot of memory and will take more when it needs it and rarely give any back.

Your attempts to find the line where the memory increased may have been foiled by the fact that Perl allocates memory in buckets. It grabs a fistful of RAM at a time so you only see the increases at the times when it runs out and needs to go back for more, not at the times when it uses the memory.

Replies are listed 'Best First'.
Re^2: memory (leaks and management)
by soliplaya (Beadle) on Mar 29, 2007 at 23:30 UTC
    I do not want to leave the impression that I am ungrateful. I am just busy putting all the above good advice to use.
    While not necessarily everything suggested is directly (or easily) applicable in this case, be assured that even the bits that are not so right now are not lost and will be remembered.

    At the moment, the program is still leaking, but I haven't lost hope. I have just tried the easiest bits first. I can see the wisdom of some of the more drastic recommendations, but some pills are bitter to swallow.

    Many thanks to all anyway.

    While I am digging, can anyone make an educated at guess at the phenomenon whereby, when I stop the program (properly, by a caught signal), and keep watching memory, said memory continues to increase (significantly) for a while, then starts decreasing until the program finally stops ? I mean, for instance does perl have to copy stuff in order to be able to destroy it ? The answer may possibly give me a clue as to what is going on.

      I mean, if I can find out what it is that gets destroyed at the end, maybe I can figure out where it comes from.
      Perl is running your END blocks and calling the DESTROY methods on objects that it's cleaning up.