Worker processes in hung state after reload
adam
nginx-forum at nginx.us
Sat Jul 2 04:01:11 MSD 2011
We use Nginx as a reverse proxy. After 2 or 3 reloads (kill -HUP), the
parent's one child worker process remains "stuck"; the parent spawns a
new one which is also often "stuck."
The number of worker_processes we have configured is 1. After a reload,
there are 2 workers in the process list. After another reload, 3
workers, and so on. Usually all of these workers are in state R. When we
strace them, we see no system calls, but they are sucking on user CPU.
They are unable to serve requests. One time (seen in detail below), a
new worker was spawned and it was *not* in state R, but state S, and was
able to serve requests, until we issued another reload.
Of course what should happen is, after a reload, we should only ever
have one worker process which is able to serve requests.
Details below, including our config. We can provide lsof, strace, debug
log of the reproduction case if needed.
#############
07/01 23:10[root at proxy ~]# cat /etc/redhat-release
CentOS release 5.6 (Final)
07/01 23:10[root at proxy ~]# uname -a
Linux proxy 2.6.21.7-2.fc8xen #1 SMP Fri Feb 15 12:39:36 EST 2008 i686
i686 i386 GNU/Linux
07/01 23:10[root at proxy ~]# nginx -V
nginx version: nginx/0.8.54
built by gcc 4.1.2 20080704 (Red Hat 4.1.2-48)
TLS SNI support disabled
configure arguments: --user=nginx --group=nginx
--prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi
--pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx
--with-http_ssl_module --with-http_realip_module
--with-http_addition_module --with-http_xslt_module
--with-http_image_filter_module --with-http_sub_module
--with-http_gzip_static_module --with-http_random_index_module
--with-http_secure_link_module --with-http_degradation_module
--with-http_stub_status_module --with-http_perl_module --with-ipv6
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions
-fstack-protector --param=ssp-buffer-size=4 -m32 -march=i386
-mtune=generic -fasynchronous-unwind-tables' --with-cc-opt='-O2 -g -pipe
-Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector
--param=ssp-buffer-size=4 -m32 -march=i386 -mtune=generic
-fasynchronous-unwind-tables'
--add-module=src/http/modules/nginx_syslog_patch
--add-module=src/http/modules/nginx_upstream_module
--add-module=src/http/modules/nginx_ajp_module
(Note above that we have a few third-party modules added for syslog and
upstream health checking.)
#############
## From fresh start:
07/01 22:42[root at proxy ~]# /etc/init.d/nginx stop
Stopping nginx: [ OK ]
07/01 22:43[root at proxy ~]# ps wwwaxuf | grep nginx
root 23433 0.0 0.0 4884 704 pts/2 S+ 22:43 0:00 |
\_ grep nginx
## It's not running. Now, start it:
07/01 22:43[root at proxy ~]# /etc/init.d/nginx start
Starting nginx: [ OK ]
07/01 22:43[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.0 13080 1564 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23464 0.0 0.1 13224 2124 ? S 22:43 0:00 \_
nginx: worker process
07/01 22:44[root at proxy ~]# /etc/init.d/nginx reload
Reloading nginx: [ OK ]
07/01 22:45[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13612 4580 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23580 0.0 0.1 13744 2684 ? S 22:45 0:00 \_
nginx: worker process
07/01 22:45[root at proxy ~]# /etc/init.d/nginx reload
Reloading nginx: [ OK ]
07/01 22:46[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13652 4600 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23787 0.0 0.1 13652 2600 ? S 22:46 0:00 \_
nginx: worker process
07/01 22:46[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13652 4600 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23787 0.0 0.1 13652 2600 ? S 22:46 0:00 \_
nginx: worker process
07/01 22:46[root at proxy ~]# /etc/init.d/nginx reload
Reloading nginx: [ OK ]
07/01 22:46[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4616 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 0.0 0.1 13784 2672 ? S 22:46 0:00 \_
nginx: worker process
07/01 22:46[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4616 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 27.3 0.2 14336 4096 ? R 22:46 0:11 \_
nginx: worker process
07/01 22:47[root at proxy ~]# /etc/init.d/nginx reload
Reloading nginx: [ OK ]
07/01 22:47[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4616 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 28.0 0.2 14336 4096 ? R 22:46 0:13 \_
nginx: worker process
nginx 23907 0.0 0.1 13784 2620 ? S 22:47 0:00 \_
nginx: worker process
07/01 22:47[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4616 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 29.4 0.2 14336 4096 ? R 22:46 0:15 \_
nginx: worker process
nginx 23907 0.0 0.1 13784 2704 ? S 22:47 0:00 \_
nginx: worker process
07/01 22:47[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4616 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 34.4 0.2 14336 4096 ? R 22:46 0:30 \_
nginx: worker process
nginx 23907 0.0 0.1 13784 2916 ? S 22:47 0:00 \_
nginx: worker process
07/01 22:49[root at proxy ~]# /etc/init.d/nginx reload
Reloading nginx: [ OK ]
07/01 22:49[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4616 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 38.1 0.2 14336 4096 ? R 22:46 1:12 \_
nginx: worker process
nginx 24145 0.0 0.1 13784 2712 ? S 22:49 0:00 \_
nginx: worker process
07/01 22:49[root at proxy ~]# /etc/init.d/nginx reload
Reloading nginx: [ OK ]
07/01 22:50[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4616 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 37.5 0.2 14336 4096 ? R 22:46 1:16 \_
nginx: worker process
nginx 24185 38.6 0.1 13784 3424 ? R 22:50 0:01 \_
nginx: worker process
07/01 22:50[root at proxy ~]# /etc/init.d/nginx reload
Reloading nginx: [ OK ]
07/01 22:50[root at proxy ~]# ps wwwaxuf | grep nginx | egrep -v
'grep|strace'
root 23463 0.0 0.2 13784 4620 ? Ss 22:43 0:00 nginx:
master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 23830 35.5 0.2 14336 4096 ? R 22:46 1:20 \_
nginx: worker process
nginx 24185 19.9 0.1 13784 3424 ? R 22:50 0:04 \_
nginx: worker process
nginx 24318 31.0 0.2 13924 3620 ? R 22:50 0:01 \_
nginx: worker process
#############
07/01 23:06[root at proxy ~]# egrep -v '^#|^$' /etc/nginx/nginx.conf
user nginx;
worker_processes 1;
syslog local2 nginx;
error_log syslog:warn|/var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local]
"$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log syslog:warn|/var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name _;
location /nginx-status {
stub_status on;
access_log off;
allow 10.0.0.0/8;
allow 127.0.0.1;
deny all;
}
location /upstream-status {
check_status;
access_log off;
allow 10.0.0.0/8;
allow 127.0.0.1;
deny all;
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/error;
}
error_page 403 /403.html;
location = /403.html {
root /usr/share/nginx/error;
}
error_page 500 502 504 /500.html;
location = /500.html {
root /usr/share/nginx/error;
}
error_page 503 /503.html;
location = /503.html {
root /usr/share/nginx/error;
}
set $global_ssl_redirect 'yes';
if ($request_filename ~ "nginx-status") {
set $global_ssl_redirect 'no';
}
if ($request_filename ~ "upstream-status") {
set $global_ssl_redirect 'no';
}
if ($global_ssl_redirect ~* '^yes$') {
rewrite ^ https://$host$request_uri? permanent;
break;
}
}
include upstream.conf;
server {
listen 443;
server_name _;
ssl on;
ssl_certificate certs/certchain.crt;
ssl_certificate_key certs/certchain.key;
ssl_protocols SSLv3 TLSv1;
ssl_ciphers HIGH;
set_real_ip_from 10.0.0.0/8;
real_ip_header X-Forwarded-For;
add_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Cache-Control public;
location / {
proxy_pass http://appserver_http;
proxy_connect_timeout 10s;
proxy_next_upstream error timeout invalid_header http_500
http_503 http_502 http_504;
proxy_set_header Host $host;
if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)") {
expires 365d;
break;
}
}
error_page 404 /404.html;
location = /404.html {
root /usr/share/nginx/error;
}
error_page 403 /403.html;
location = /403.html {
root /usr/share/nginx/error;
}
error_page 500 502 504 /500.html;
location = /500.html {
root /usr/share/nginx/error;
}
error_page 503 /503.html;
location = /503.html {
root /usr/share/nginx/error;
}
}
}
Posted at Nginx Forum: http://forum.nginx.org/read.php?2,211695,211695#msg-211695
More information about the nginx
mailing list