modperl-location_of_infinite_loops

This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.



To: "'modperl@apache.org'" <modperl@apache.org>
From: Matt Sergeant <msergeant@startechgroup.co.uk>
Subject: Locating infinite loops
Date: Tue, 20 Nov 2001 10:04:48 -0000

I have an error on my server that I think is caused by an infinite loop in
perl code [*]. Does anyone have a reliable way to detect where this is
happening on a server with lots of code?

Matt.
  -- 
<:->Get a smart net</:->

[*] In case anyone was wondering, this is probably why you can't get to
axkit.org at the moment, and my car is in the garage, so I can't get home to
login and kill the rogue process, and ssh won't let me in due to timeouts.
Yes, I need Apache::Watchdog, I know.

===

To: Matt Sergeant <msergeant@startechgroup.co.uk>
From: Stas Bekman <stas@stason.org>
Subject: Re: Locating infinite loops
Date: Tue, 20 Nov 2001 20:04:22 +0800

Matt Sergeant wrote:

> I have an error on my server that I think is caused by an infinite loop in
> perl code [*]. Does anyone have a reliable way to detect where this is
> happening on a server with lots of code?


http://perl.apache.org/guide/debug.html#Using_the_Perl_Trace

===

To: "Matt Sergeant" <msergeant@startechgroup.co.uk>,
<modperl@apache.org>
From: "Jeremy Howard" <jh_lists@fastmail.fm>
Subject: Re: Locating infinite loops
Date: Tue, 20 Nov 2001 23:17:13 +1100

Matt Sergeant asked:
> I have an error on my server that I think is caused by an infinite loop in
> perl code [*]. Does anyone have a reliable way to detect where this is
> happening on a server with lots of code?

 ----
  $SIG{ALRM} = sub {
    Carp::confess("Got Apache::Event ALRM");
  };
  alarm(300);
 ----
Replacing 300 with some amount which any process should finish in.

Not elegent, but it seems to work. For instance, this:
 ----
use Carp;

$SIG{ALRM} = sub {
Carp::confess("Got Apache::Event ALRM");
};
alarm(3);
temp();
sub temp {
  sleep(5);
}
 ----

...gives this result:
 ----
Got Apache::Event ALRM at testal.pl line 4
        main::__ANON__('ALRM') called at testal.pl line 9
        main::temp() called at testal.pl line 7
 ----

...which even shows which line Perl was up to when the SIGALRM was called
(line 9 in this case).


===

the rest of The Pile (a partial mailing list archive)

doom@kzsu.stanford.edu