Nginx工作原理:master-worker

本文解析Nginx的master-worker模型原理,探讨如何设置worker数量与连接数以达到最优性能,适用于Linux环境下高性能服务器配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 问题引出

在linux中启动nginx, 会发现开启了不止一个进程, 如下图:
在这里插入图片描述
其中一个master进程, 四个worker进程.

二. 原理

在这里插入图片描述
 master负责将请求分配给手下的worker, worker接到分配的请求来做具体的事情. 所有的worker并不是轮询来处理master的请求, 而是采用"争抢"机制:
在这里插入图片描述

1. master-worker有什么好处呢?

(1) 可是使用nginx -s reload来实现热部署;
(2) 每个worker都是独立的进程, 不需要加锁, 避免了锁带来的开销. 如果一个worker出现问题, 其他worker进程可以继续进行争抢, 实现请求过程不会造成中断.

2. worker设置多少个合适呢?

答: 设置为何cpu核心数相等的个数最为适宜, 如下图:
在这里插入图片描述
 nginx和redis类似, 都采用了io多路复用机制, 每个worker都是一个独立进程, 每个进程里只有一个主线程, 通过异步非阻塞的方式来处理请求. 所以worker和服务器的cpu数相等最为适宜. 设置少了会浪费cpu, 多了会造成cpu频换切换上下文带来损耗.

注: windows系统并没有上面所说的io多路复用机制, 所以windows下的nginx并不能将性能最大化.

3.worker_connections连接数相关问题

(1) 一个请求过来, worker要占用几个连接数?

答: 2个或4个;
  如果是访问静态资源, 不经过tomcat, 则为2个连接数;
  如果访问作为反向代理, 访问tomcat, 则为4个连接数;
在这里插入图片描述

(2) 如果一个nginx有1个master, 4个worker, 每个worker支持最大连接数1024, 那么支持的最大并发是多少?

答:
  访问静态资源, 最大并发数= 4 * 1024 / 2
  访问动态资源: 最大并发数= 4 * 1024 / 4
公式:
  静态资源: worker_processes * worker_connections / 2
  HTTP反向代理: worker_processes * worker_connections / 4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值