背景
无论是用nginx -s reload
还是systemctl restart nginx
重启Nginx,你可能会注意到系统中出现了名为“nginx: worker process is shutting down”的奇怪进程。即使结束Nginx主进程,这些进程也不会消失。
可能的原因及解决
默认情况下,Nginx的worker process在处理长连接时,即使主进程重载或结束,在长连接没有断开的情况下worker process也会一直存活,并以上述奇怪进程的形式存在。
如果你不在乎长连接是否断开,解决办法就是给worker process添加一个超时时间。在nginx.conf
文件中添加如下配置:
# 设置超时时间为10s
worker_shutdown_timeout 10;
修改完设置后重载Nginx,新产生的worker process就不会再出现上述问题了。不过修改设置前系统中已有的“nginx: worker process is shutting down”进程此时需要手动杀死。
代价是什么
如此修改完,重启Nginx后,之前建立的长连接会在超过超时时间后断掉。可能会对用户体验产生一定影响。不过话说回来,生产环境谁没事老重启Nginx玩呢。