[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