IBM HTTP Server customers occasionally encounter problems stopping
the web server. The expected result of apachectl stop
or
sending the SIGTERM
signal to the IHS parent process is
that all httpd processes for that web server instance will exit within
around thirty seconds. When this does not occur, IBM HTTP Server
support needs data to be collected on the remaining httpd processes to
help diagnose why the processes have not terminated.
When this type of problem occurs, the remaining httpd processes normally show "1" for their parent process id, as shown in this example:
$ ps -ef | grep httpd nobody 15876 1 0 Feb 08 - 0:00 /usr/HTTPServer/bin/httpd nobody 17112 1 0 Feb 08 - 0:00 /usr/HTTPServer/bin/httpd nobody 17524 1 0 Feb 08 - 0:00 /usr/HTTPServer/bin/httpd nobody 19252 1 0 Feb 17 - 0:00 /usr/HTTPServer/bin/httpd nobody 20048 1 0 Feb 08 - 0:00 /usr/HTTPServer/bin/httpd nobody 20944 1 0 Feb 08 - 0:00 /usr/HTTPServer/bin/httpd nobody 21734 1 0 Feb 17 - 0:00 /usr/HTTPServer/bin/httpd nobody 24166 1 0 Feb 17 - 0:00 /usr/HTTPServer/bin/httpd
Before killing the processes manually, gather the required documentation, as directed below.
IBM HTTP Server 2.0.42.x | Before submitting documentation to IBM for analysis, ensure that you are using cumulative e-fix PK01070 or later to correct a pervasive termination problem. |
IBM HTTP Server 2.0.47.x |
The apachectl stop
command sends the SIGTERM signal to
the httpd parent process in order to shut down the web server. When
IBM HTTP Server is started under IBM Tivoli Monitoring, the SIGTERM
signal may be masked by IBM Tivoli Monitoring. This will cause the
apachectl stop
command to be ineffective.
A work-around for this problem is to start IBM HTTP Server using a special Perl script which restores the SIGTERM signal before starting IBM HTTP Server.
/usr/local/bin/unblocksigterm.pl
:
#!/usr/bin/perl -w use strict; use POSIX; my $how = SIG_UNBLOCK; my $set = POSIX::SigSet->new(SIGTERM); if (!sigprocmask($how, $set)) { die "sigprocmask failed: $!"; } my $cmd = join(' ', @ARGV); print "$0: running $cmd\n"; my $rc = system($cmd); exit($rc != 0 ? 1 : 0);
chmod
:
# chmod +x /usr/local/bin/unblocksigterm.pl
unblocksigterm.pl
by
adjusting the command specified in the IBM Tivoli Monitoring
configuration:
/usr/HTTPServer/bin/apachectl start
/usr/local/bin/unblocksigterm.pl
/usr/HTTPServer/bin/apachectl start
The hang documentation tool is used to gather the required documentation. When using the tool, specify auto as the value of the parent process id parameter, and specify - as the non-SSL address parameter, as in the following example:
# java -jar ServerDoc.jar GatherHangDoc /usr/HTTPServer auto -
After trying to stop the web server, wait at least sixty seconds before gathering documentation.
The hang documentation instructions have further information about the use of the tool.