nginx的进程模型可以理解为:多进程+多路复用。
nginx的进程模型
使用linux的ps命令查看当前nginx的进程(ps -ef | grep nginx),可以看到有两个进程,分别是nginx:master和nginx:worker。
![nginx的进程模型与配置](http://p2.ttnews.xyz/loading.gif)
两个进程之间的关系可以用如下图来表示:
![nginx的进程模型与配置](http://p2.ttnews.xyz/loading.gif)
nginx这样处理的优点有:
- 当nginx启动后,产生一个master进程,当master执行一系列操作后会产生一个或多个worker进程。
- 当有请求进来时,master会向worker发信号,然后通过worker进程去处理请求,一个请求对应一个worker。
- master会监控worker的状态。当worker产生异常时,会启动一个新的woker。
- 多个worker之间是一种竞争关系。每个worker进程可以产生多路复用。
- nginx的每个进程都是独立的,相互之间是安全的。一个worker 宕机了,其它work还是继续工作,相互没有影响。
当我们将配置文件中work_processes由1改成2后,重启nginx会发现多了一个work_processes,理论上单机nginx支持的并发数为(work_processes * work_connections)。
worker_processes配置
上面已经介绍了work_processes的配置,但是这个数并不是越大越好,建议配置为1,最大也不要超过8。比你当前CPU核数小就可以了。官方原文建议是:
<code>Nginx unlike Apache and other process per connection webservers.
It uses one master process to start and monitor a small number of worker processes
that actually handle the connections.
My recommendation is to start with the default number of workers, which is 1./<code>
worker_cpu_affinity配置
这个参数默认是不开启的。所以我们如果要配置,建议首先查看CPU核数(与上面一致)。它是由0和1这样的二进制参数 组成。
以2核CPU开启2进程为例,"01"代表使用第一个CPU内核,“10”代表使用第二个CPU内核。组数代表进程数。
配置示例如下所示:
测试
配置完成后重启nginx,使用ab命令测试,然后使用top命令查看CPU使用情况。
<code># /usr/local/nginx-1.16.1/sbin/nginx -s reload/<code>
<code># ab -n 30000 -k http://localhost/index.html/<code>
<code># top/<code>
閱讀更多 李老師tome 的文章