httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ben Laurie <...@gonzo.ben.algroup.co.uk>
Subject Re: WWW Form Bug Report: "Scoreboard show long-since dead 'W' children" on Irix (fwd)
Date Wed, 17 Jul 1996 15:31:40 GMT
Rob Hartill wrote:
> 
> 
> Not acked. not good news..
> 
> 
> Message-Id: <199607170433.VAA01965@taz.hyperreal.com>
> From: bn@hway.net
> To: apache-bugs%apache.org@organic.com
> Date: Tue Jul 16 21:33:03 1996
> Subject: WWW Form Bug Report: "Scoreboard show long-since dead 'W' children" on Irix
> 
> Submitter: bn@hway.net
> Operating system: Irix, version: 5.3 & 6.2
> Version of Apache Used: 1.1.1
> Extra Modules used: 
> URL exhibiting problem: 
> 
> Symptoms:
> --
> After the server has been run a while
> (few hours / several 100,000 hits), the scoreboard
> starts to show slots occupied by servers reported
> to be in the "W"rite mode with a lot of
> "SS".  The processes actually do not exist when
> checked by the ps command.  After a few days of
> run time (several million hits) the scoreboard
> becomes filled with these non-existant "W"
> processes.  Eventually, the server throttles
> itself via the MaxClients and fails to accept any
> more requests.  Any ideas?

This is, of course, impossible. Once a second, Apache does a wait(), and hence
should be notified of any dead children. The code in this area is fairly tight,
and I can't really see any possibility of it failing to mark a child dead if
notified. This leads me to suspect that Apache is never notified. It should
be simple enough to check this theory by simply logging the child pids and
checking that the offending children have never been logged:

	int status, child_slot;
	int pid = wait_or_timeout(&status);
	
	if (pid >= 0) {
	    /* Child died... note that it's gone in the scoreboard. */
/* ADD THIS (in http_main.c) */
	    log_printf("Reaping %d",pid);
	    sync_scoreboard_image();
	    child_slot = find_child_by_pid (pid);
	    if (child_slot >= 0)
		(void)update_child_status (child_slot, SERVER_DEAD,
		 (request_rec*)NULL);
        }

if this shows that Apache is not at fault, then the problem is in the kernel.
It may be possible to work around the problem with a waitpid() - I believe
someone tried that once with some success.

Let us know what happens.

Cheers,

Ben.

> --
> 
> Backtrace:
> --
> 
> --
> 
> ----- End of forwarded message from bn@hway.net -----
> 
> -- 
> Rob Hartill (robh@imdb.com)
> The Internet Movie Database (IMDb)  http://www.imdb.com/
>            ...more movie info than you can poke a stick at.

-- 
Ben Laurie                  Phone: +44 (181) 994 6435
Freelance Consultant and    Fax:   +44 (181) 994 6472
Technical Director          Email: ben@algroup.co.uk
A.L. Digital Ltd,           URL: http://www.algroup.co.uk
London, England.            Apache Group member (http://www.apache.org)

Mime
View raw message