1、mater 和 worker

[root@iZcyriae88knxxZ ~]# ps -ef | grep nginx
root     23213     1  0 11:55 ?        00:00:00 nginx: master process /www/server/nginx/sbin/nginx -c /www/server/nginx/conf/nginx.conf
www      25091 23213  0 16:56 ?        00:00:02 nginx: worker process
www      25092 23213  0 16:56 ?        00:00:00 nginx: cache manager process
root     31910 31858  0 22:43 pts/0    00:00:00 grep --color=auto nginx

2、worker 如何进行工作的
  在nginx启动过程中,主进程就是master进程,该进程在启动各个worker进程之后,就会进入一个无限循环中,以处理客户端发送过来的控制指令;而worker进程则会进入一个循环中,从而不断接收客户端的连接请求以及处理请求。如下是master-worker进程模型的一个原理示意图:

   从图中我们可以看出nginx工作的一般性原理:

  • master进程通过接收客户端的请求,比如-s reload-s stop等,解析这些命令之后,通过进程间通信,将相应的指令发送到各个worker进程,从而实现对worker进程的控制;
  • 每个worker进程都会竞争同一个共享锁,只有竞争到共享锁的进程才能够处理客户端请求;
  • 当客户端请求发送过来之后,worker进程会处理该请求的事件,如果是accept事件,则会将其添加到accept队列中,如果是read或者write事件,则会将其添加到read-write队列中;
  • 在将事件添加到相应的队列中之后,在持有共享锁的情况下,nginx会处理完accept队列中的客户端连接请求,而对于read或者write事件,则会在释放锁之后直接从read-write队列中取出事件来处理。

3、一个 master 和多个 woker 有好处
(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的, 继续进行争抢,实现请求过程,不会造成服务中断


4、设置多少个 woker 合适
worker 数和服务器的 cpu 数相等是最为适宜的

nginx的master-worker进程模型是其能够高性能的处理用户请求的原因之一,而且这里的每个worker进程都只会启动一个线程来处理用户请求。通常我们会将worker进程的数量设置得与我们的CPU数量一致,nginx也会将每个进程与每个CPU进行绑定。通过这种方式,可以充分利用操作系统多核的特性,并且能够最大限度的减少线程之间的切换而导致的资源损耗。


5、连接数 worker_connection
第一个:发送请求,占用了 woker 的几个连接数?
答案:2 或者 4 个
第二个:nginx 有一个 master,有四个 woker,每个 woker 支持最大的连接数 1024,支持的 最大并发数是多少?

  • 普通的静态访问最大并发数是: worker_connections * worker_processes /2,
  • 而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4。