7.1.3 Master/Worker进程模型与职责
Master/Worker进程模型与职责#
Nginx采用Master/Worker多进程模型以兼顾高并发与稳定性。Master进程负责整体管理与控制,Worker进程负责实际请求处理与事件循环。
原理草图(进程与连接流转)
Master进程职责
- 读取与校验配置文件,初始化运行环境与共享内存
- 创建、管理、监控Worker进程(启动、重启、平滑升级)
- 处理信号与生命周期管理(reload、stop、quit、reopen)
- 维护PID文件、日志重开与资源分配协调
Worker进程职责
- 处理客户端连接与请求(HTTP/Stream)
- 执行事件循环与非阻塞I/O
- 调用模块处理请求阶段(如重写、访问控制、反向代理)
- 写入日志、维护连接状态与缓存交互
关键配置示例(含完整路径)
# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
events {
worker_connections 10240;
multi_accept on;
accept_mutex on;
}
http {
log_format main '$remote_addr - $request $status $request_time';
access_log /var/log/nginx/access.log main;
server {
listen 80;
server_name localhost;
location / {
return 200 "nginx master/worker ok\n";
}
}
}
命令示例与解释
# 1) 查看Master/Worker进程树
ps -eo pid,ppid,cmd | grep nginx
# 2) 发送信号:平滑加载配置(新Worker接管,旧Worker完成请求后退出)
nginx -s reload
# 3) 优雅退出(等待请求处理完成)
nginx -s quit
# 4) 立即退出(不等待)
nginx -s stop
# 5) 日志切割后重开日志文件
nginx -s reopen
# 6) 查看监听与连接分配情况
ss -lntp | grep nginx
信号与效果对照
- HUP:重新加载配置并启动新Worker
- QUIT:优雅退出,处理完当前请求后关闭
- TERM/INT:立即退出
- USR1:重新打开日志文件(日志切割后使用)
排错与验证
# 配置语法检查
nginx -t
# 查看错误日志定位Worker异常退出原因
tail -f /var/log/nginx/error.log
# 验证worker数量是否生效(应为CPU核心数或auto)
ps -ef | grep "nginx: worker process"
# 验证连接上限是否生效
# 理论最大并发 = worker_processes * worker_connections
常见问题与处理
- Worker频繁退出:检查error.log是否有模块崩溃、权限问题、文件描述符不足
- reload后配置未生效:nginx -t检查语法,确认主配置文件路径正确
- 连接数不足:提升worker_connections与worker_rlimit_nofile,并同步调整系统ulimit
练习
1. 将worker_processes设为auto,使用ps确认Worker数量与CPU核心数一致。
2. 修改worker_connections为2048与10240,压测并观察并发连接差异。
3. 手动轮转access.log后执行nginx -s reopen,验证新日志是否写入。
4. nginx -s reload后观察Master与Worker PID的变化,确认平滑切换。