Nginx工作进程长期无法终止的原因咨询(TCP负载均衡场景)


Nginx工作进程显示“worker process is shutting down”却无法终止的原因及解决办法
核心原因
- 未关闭的长连接:TCP负载均衡场景中,若后端存在长连接(如持久化TCP连接、WebSocket),Nginx默认会等待这些连接主动关闭后才终止worker进程,若连接一直不主动断开,进程就会长期处于shutdown状态。
- 缺失超时配置:未设置
worker_shutdown_timeout,也未配置TCP代理相关的超时参数(如proxy_timeout),导致进程无限制等待连接关闭。 - 系统调用阻塞:worker进程在与后端交互时,卡在某个系统调用(如读写操作)上,无法触发退出流程。
- 资源泄漏:进程处理请求时出现内存泄漏,或持有未释放的文件句柄、共享内存等资源,导致无法正常退出。
解决措施
- 配置worker shutdown超时:在
nginx.conf的主块中添加worker_shutdown_timeout 30s;,指定进程等待连接关闭的最长时间,超时后强制终止。 - 优化TCP连接超时:在
stream负载均衡配置块中,设置proxy_timeout 5m;(根据业务实际调整时长),自动断开长时间无交互的连接。 - 强制终止僵死进程:使用
kill -9 <进程PID>强制杀死无法退出的worker进程,建议在业务低峰期操作,避免影响在线请求。 - 排查阻塞点:用
strace -p <进程PID>查看进程当前的系统调用,定位是否因后端无响应导致卡住。 - 升级Nginx版本:若使用的是较旧版本,升级到最新稳定版,修复可能存在的TCP负载均衡场景下的退出逻辑bug。
内容的提问来源于stack exchange,提问作者Naveen Vikrama Prasad
相关产品推荐
相关产品推荐

