Worker other than the master is listening to the socket

Maxim Dounin mdounin at mdounin.ru
Mon Apr 22 14:30:52 UTC 2019


Hello!

On Fri, Apr 19, 2019 at 03:16:14AM -0400, allenhe wrote:

> Nginx version: 1.13.6.1
> 
> 1) In our use case, the Nginx is reloaded constantly. you will see lots
> worker process hanging at "nginx: worker process is shutting down" after
> couple days: 
> 
>      58 root       0:00 nginx: master process ./openresty/nginx/sbin/nginx
> -p /opt/applicatio
>  1029 nobody     0:22 nginx: worker process is shutting down
>  1030 nobody     0:27 nginx: worker process is shutting down
>  1041 nobody     0:54 nginx: worker process is shutting down
>  1054 nobody     0:37 nginx: worker process is shutting down
>  1131 nobody     0:02 nginx: worker process is shutting down
>  1132 nobody     0:02 nginx: worker process is shutting down
>  1215 nobody     0:50 nginx: worker process is shutting down
>  1216 nobody     0:53 nginx: worker process is shutting down
>  1515 nobody     0:23 nginx: worker process is shutting down
>  1516 nobody     0:47 nginx: worker process is shutting down
>  1533 nobody     0:03 nginx: worker process is shutting down
>  1534 nobody     0:16 nginx: worker process is shutting down
>  1598 nobody     0:00 nginx: worker process
>  1599 nobody     0:00 nginx: worker process
> 
> 
> 2) And if you now check some listen port on the host using netstat, you will
> see it is owned by the worker process:
> 
> [root at paas-controller-177-1-1-137:~]$ netstat -anp |grep 10080
> tcp        0      0 0.0.0.0:10080           0.0.0.0:*               LISTEN  
>    6288/nginx: worker
> tcp        0      0 10.47.205.136:10080     10.47.205.137:50827    
> ESTABLISHED 6296/nginx: worker
> tcp        0      0 10.47.205.136:10080     10.47.205.137:50833    
> ESTABLISHED 6300/nginx: worker
> tcp        0      0 10.47.205.136:10080     10.47.205.137:49411    
> ESTABLISHED 6296/nginx: worker
> tcp        0      0 10.47.205.136:10080     10.40.157.154:54074    
> ESTABLISHED 6296/nginx: worker
> tcp        0      0 10.47.205.136:10080     10.47.205.137:49715    
> ESTABLISHED 6299/nginx: worker
> tcp6       0      0 :::10080                :::*                    LISTEN  
>    6288/nginx: worker

The "netstat -p" command prints only one process - the one with 
lowest PID - which has the socket open.  But in fact listening 
sockets are open in nginx master process and all worker processes.

After a number of reloads a worker process may get PID 
lower than PID of the master, and "netstat -p" will start to 
report this worker as the process the socket belongs to.  This is 
not something to be afraid of, it is just a result of a "netstat -p" 
limited interface.

To see all processes which have the socket open, consider using 
"ss -nltp" instead.

> 3) So far, you would say it is not a big deal as long as the worker could
> serve the request correctly. but it does NOT. suppose the listen port 10080
> above would proxy the request to the upstream server A initially (and for
> sure this port was listening by the master process), days later, it has been
> changed to the server B and of course the Nginx was been reloaded at the
> same time (and perhaps some worker was left in " is shutting down" state at
> that time). well now, I see this port is listening by a worker process, and
> it would proxy the request to the old server A.

This is not something that can happen, since old worker 
processes, which are in the "shutting down" state, no longer 
accept new connections.  Such processes close all listening 
sockets as soon they are asked to exit.

-- 
Maxim Dounin
http://mdounin.ru/


More information about the nginx mailing list