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_connectionsworker_rlimit_nofile,并同步调整系统ulimit


练习
1. 将worker_processes设为auto,使用ps确认Worker数量与CPU核心数一致。
2. 修改worker_connections204810240,压测并观察并发连接差异。
3. 手动轮转access.log后执行nginx -s reopen,验证新日志是否写入。
4. nginx -s reload后观察Master与Worker PID的变化,确认平滑切换。