[ic] ChildLife config directive - page server pid xxxxx won't die

John1 list_subscriber at yahoo.co.uk
Tue Jul 20 17:03:17 EDT 2004


My interchange error log is full of "page server pid xxxxx won't die"
entries.

interchange.cfg extract:
-----------------------
PreFork             Yes
StartServers        5
MaxServers          0
MaxRequestsPerChild 100
HouseKeeping        2
PIDcheck            120
ChildLife           30 minutes

Interchange error.log extract:
-----------------------------

- - - [15/June/2004:08:13:59 +0100] - - START server (30352) (UNIX)
- - - [15/June/2004:08:13:59 +0100] - - Interchange page server started
(process id 30357)
- - - [15/June/2004:08:13:59 +0100] - - Interchange page server started
(process id 30359)
- - - [15/June/2004:08:13:59 +0100] - - Interchange page server started
(process id 30361)
- - - [15/June/2004:08:13:59 +0100] - - Interchange page server started
(process id 30363)
- - - [15/June/2004:08:14:00 +0100] - - Interchange page server started
(process id 30365)
- - - [15/June/2004:08:44:02 +0100] - - page server pid 30363 won't die!
- - - [15/June/2004:08:44:02 +0100] - - page server pid 30365 won't die!
- - - [15/June/2004:08:44:04 +0100] - - page server pid 30369 won't die!
- - - [15/June/2004:08:44:04 +0100] - - page server pid 30371 won't die!
- - - [15/June/2004:08:44:04 +0100] - - page server pid 30373 won't die!
- - - [15/June/2004:08:44:04 +0100] - - page server pid 30375 won't die!
- - - [15/June/2004:09:14:08 +0100] - - page server pid 15711 won't die!
- - - [15/June/2004:09:14:10 +0100] - - page server pid 15719 won't die!
- - - [15/June/2004:09:14:10 +0100] - - page server pid 15721 won't die!
- - - [15/June/2004:09:14:10 +0100] - - page server pid 15723 won't die!
- - - [15/June/2004:09:14:10 +0100] - - page server pid 15725 won't die!


>From the above log extract you can see that the pids are in blocks of 5 i.e.
It would look like the processes are infact dieing and being renewed,
despite the error message.

The section of server.pm which deals with this is:

#######################
  if($Global::PreFork) {
   my @bad_pids;
   my (@pids) = sort keys %Page_pids;
   my $count = scalar @pids;
   while ($count > ($Global::StartServers + 1) ) {
#::logDebug("too many pids");
    my ($bad) = shift(@pids);
#::logDebug("scheduling %s for death", $bad);
    push @bad_pids, $bad;
    $count--;
   }

   foreach my $pid (@pids) {
    kill(0, $pid) and next;
#::logDebug("Unresponsive server at PID %s", $pid);
    push @bad_pids, $pid;
   }

   while($count < $Global::StartServers) {
#::logDebug("Spawning page server to reach StartServers");
    start_page(undef,$Global::PreFork,1);
    $count++;
   }
   for my $pid (@bad_pids) {
#::logDebug("Killing excess or unresponsive server at PID %s", $pid);
    if(kill 'TERM', $pid) {
#::logDebug("Server at PID %s terminated OK", $pid);
     # This is OK
    }
    elsif (kill 'TERM', $pid) {
     ::logGlobal("page server pid %s required KILL", $pid);
    }
    else {
     ::logGlobal("page server pid %s won't die!", $pid);
    }
    delete $Page_pids{$pid};
   }
  }
#######################

So, I am guessing that if(kill 'TERM', $pid) is returning false, put I can't
see why?

Also, as a separate question, should the second
kill 'TERM', $pid

actually be:
kill 'KILL', $pid

Anyone any ideas what's going on here?



More information about the interchange-users mailing list