整活 · 27 10 月, 2024 0

解决Nginx重启后出现进程:nginx: worker process is shutting down

背景

无论是用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玩呢。