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。