nginx的进程模型与配置

nginx的进程模型可以理解为:多进程+多路复用。

nginx的进程模型

使用linux的ps命令查看当前nginx的进程(ps -ef | grep nginx),可以看到有两个进程,分别是nginx:master和nginx:worker。

nginx的进程模型与配置

两个进程之间的关系可以用如下图来表示:

nginx的进程模型与配置

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)。

nginx的进程模型与配置

nginx的进程模型与配置

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的进程模型与配置

测试

配置完成后重启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>


分享到:


相關文章: