Nginx进程间的关系

Posted 极速快码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的目录结构图:
 
技术图片
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

以上是关于Nginx进程间的关系的主要内容,如果未能解决你的问题,请参考以下文章

转载:2.1 运行中的Nginx进程间的关系《深入理解Nginx》(陶辉)

Nginx学习——Nginx进程间的通信

Nginx之进程间的通信机制(Nginx频道)

Nginx之进程间的通信机制(信号信号量文件锁)

nginx性能优化

nginx 和php-fpm关系