OPS Nginx 基本原理
master与worker
在Nginx启动后,会有2种基础进程。
一个名为Master,一个名为Worker:
Mater负责调度、管理Worker进程,而Worker进程用于真正的与用户进行链接。
Worker进程可以有多个,由于Worker设计为了进程,所以它们之间相互资源隔离互不打扰,不会发生资源安全问题。
请求链接
当有一个链接被Master收到后,Master会通知所有未在服务状态的Worker对该请求进行争抢。
而如果一个Master正在为链接提供服务,则不会参与此处争抢。
Worker数量
Nginx采用I/O多路复用epoll机制,默认开启了1个Worker。
worker_processes 1;
你可以根据服务器CPU数量,适当调整Worker的数量。
一般来说,如16核心CPU则调整为16个Worker。
你可以为每个Worker绑定特定的CPU核心,如下示例:
worker_processes 4
# work 绑定 cpu(4work绑定4cpu):
worker_cpu_affinity 0001 0010 0100 1000
# work 绑定 cpu (4work绑定8cpu中的4个):
worker_cpu_affinity 0000001 00000010 00000100 00001000
链接数
链接数是每个Worker所能承受的最大并发数。
每个Worker最大可处理链接数默认为1024,一般设置为默认值即可:
events {
worker_connections 1024;
}
如何计算1个Nginx服务最大支持多少链接数呢?
如开启了4个Worker进程,每个Woker进程的链接数为1024,则这个Nginx服务最大支持的链接数为 4 * 1024
值得一提的是,如果是HTTP1.1协议,则每次浏览器访问需要占2个链接数,即为 4 * 1024 / 2
而作为反向代理服务器,最大并发数量应该是 4 * 1024 / 4,因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。