目录
一、Nginx原理
master&worker:发送请求,先到master管理员,把任务下发到下面的worker,worker通过争抢机制进行抢占资源,进行工作。
查看nginx进程,有一个master和一个worker,但是worker可以有多个
[root@localhost sbin]# ps -ef | grep nginx
root 9959 2102 0 12:51 pts/0 00:00:00 grep --color=auto nginx
root 25296 1 0 12:12 ? 00:00:00 nginx: master process ./nginx
nobody 25297 25296 0 12:12 ? 00:00:00 nginx: worker process
[root@localhost sbin]#
master--worker的机制的好处
首先,对于每个worker进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多。其次,采用独立的进程,可以让互相之间不会影响,一个进程退出后,其他进程还在工作,服务不会中断,master进程则很快启动新的worker进程。当然,worker进程的异常退出,肯定是程序有bug了,异常退出,会导致当前worker上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
需要设置多少个worker
Nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求,即使是上千上万个请求也不在话下。每个worker的线程可以把一个cpu的性能发挥到极致。所以worker数和服务器的cpu数相等是最为适宜的。设少了会浪费cpu,设多了会造成cpu频繁切换上下文带来的损耗。
连接数 worker_connection
1、发送请求,占用了worker的几个连接数?
答案:2个或者4个
2、nginx有一个master,有四个worker,每个worker支持最大连接数据是1024,目前支持的最大的并发数?
答案:普通的静态访问最大并发数是:worker_connection*worker_processes/2
如果是http反向代理,最大并发数是:worker_connection*worker_processes/4