Nginx进程间的关系
Nginx进程间的关系
在正式的产品环境中,Nginx都是使用一个master进程来管理多个worker进程,一般情况下,worker进程的数量和服务器的CPU核心数一致,每一个worker进程都是繁忙的,它们是nginx中真正的提供互联网服务的进程,相比之下,master进程则是很清闲的,它只负责监控和管理worker进程。worker进程之间通过共享内存、原子操作等进程通信机制来实现负载均衡等功能。
Nginx是支持单进程(master进程)提供服务的,那么为什么产品环境中需要按照master-worker方式来配置同时启动多个进程呢?主要是有以下两个原因:
1.由于master进程不会对用户请求提供服务,只负责管理worker进程,所以master进程可以是唯一的,它只会专注于管理工作,为管理员提供命令行服务。同时master进程需要较大的权限,一般是使用root用户启动master进程。worker进程的权限不能大于master进程,这样master进程才能对worker进程进行管理。当任意一个worker进程出现异常导致coredump的时候,master进程会立刻启动新的worker服务来继续服务。
2.多个worker进程处理互联网请求可以提供服务的健壮性(一个worker进程异常后,其他worker进程可以正常提供服务),最关键的,这样可以充分的利用SMP多核架构,从而实现微观上真正的多核并发处理。所以,使用一个master进程来处理互联网请求是不合适的。
这里可能有一个疑问,那为什么不干脆就多启动一些worker进程,而是只启动和CPU核心数一致的进程???
这也是Nginx和Apache服务器不同的地方,在Apache中每一个进程同一时刻只能处理一个请求,如果希望web服务器拥有更强的并发处理能力,就要把Apache的进程数和线程数设置得更多,通常一台服务器可能存在数百个工作进程,这些进程之间的切换将会消耗大量的系统资源。而nginx的worker进程可以同时处理的请求数只受限于内存大小,而且在不同worker进程处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此,当nginx的worker进程数于CPU核心数相等时,进程之间切换的代价最小。
下面附上一张nginx的目录结构图:
作者:红雨
出处:https://www.cnblogs.com/52why
微信公众号: 红雨python