in reply to Debugging running processes

Using any of the cpan profiler modules is useful for finding general inefficiencies, but may not be much help in your case. If it only bogs down very intermittently, then statistical approaches will not help much.

What OS are you running on? If Linux, I would first try strace (hey, maybe you'll get lucky :)). If you can't predict when the problem will occur, pipe the strace output to a perl script that rolls the file when it gets big, and keeps the last 10 or so around. If you are running on Solaris, you will probably have more success with dtrace, but this is non-trivial as it has its own programming language ('D').

You could also add lots of debug statements at potential problem spots, that only print when a global is set. You could trigger setting the global on a couple of different things. If you have a main subroutine that is called per-message, you could time its operation. When it gets above a certain threshold, turn on debugging. Or, you could set up a CPU monitor script that sent SIGUSR1 when it got high, and have your program catch it and turn debugging on.

Replies are listed 'Best First'.
Re^2: Debugging running processes
by kappa (Chaplain) on Oct 31, 2008 at 23:09 UTC
    Looks like the problem is in user space. Most probably a worst-case scenario (combinatorial explosion) of a regexp is triggered. So strace won't help. And this is FreeBSD.
    --kap