今天来给大家讲解一下Nginx的工作原理以及的一些可优化的参数配置,也都是在实际工作中总结出来的经验。
一、nginx工作原理
1.1、nginx进程模型
nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,如下图所示:
1.2、master和worker的工作职责
master是一个领导,它只负责管理worker,具体的工作任务由下面的worker(工人)去做。
master的职责:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worker的职责:处理来自客户端的请求,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,如下图所示:
各个worker进程互相之间是独立的,一个请求只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。
1.3、master-workers的机制的好处
1、对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了加锁带来的开销,同时在编程以及问题查找时,也会方便很多。
2、采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快启动新的worker 进程。当然,worker 进程的异常退出,肯定是程序有 bug 了,异常退出,会导致当前 worker 上的所有请求失败,不过不会影响到所有请求,所以降低了风险。
二、优化参数配置
2.1、worker_processes进程数设置
Nginx 采用了 io 多路复用机制,每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式来处理请求, 即使是千上万个请求也不在话下。每个 worker的线程可以把一个 cpu的性能发挥到极致,所以 worker 数和服务器的cpu核数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗。
修改Nginx的nginx.conf配置文件,设置worker_processes进程数量
# 设置 worker 数量。
worker_processes 2
CentOS 查看系统 CPU个数、核心数、线程数的几个命令:
1、查看CPU物理个数
grep ‘physical id’ /proc/cpuinfo | sort -u | wc -l
2、查看CPU核数
grep ‘core id’ /proc/cpuinfo | sort -u | wc -l
3、查看CPU线程数
grep ‘processor’ /proc/cpuinfo | sort -u | wc -l
2.2、Nginx能支持的最大并发数
nginx的配置文件中有一个worker_connection属性的配置,这个是表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,理论上应该是 worker_connections * worker_processes。
那么问题来了,发送一个http请求,占用了woker的几个连接数呢?答案应该是2个或者4个
如果是支持 http1.1 的浏览器每次访问要占两个连接,所以Nginx处理普通的静态访问最大并发数是: worker_connections * worker_processes /2
如果是作为HTTP反向代理服务器,Nginx能处理的最大并发数量应该是 worker_connections *worker_processes/4。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。
举个例子:
nginx 有一个 master ,有四个 worker ,每个 worker 支持最大的连接数1024 ,那么nginx支持的最大并发数是多少?
普通的静态访问最大并发数是: worker_connections * worker_processes /2
所以就是1024*4/2=2048
而如果是 HTTP 作 为反向代理来说,最大并发数量应该是 worker_connections *worker_processes/4
所以就是1024*4/4=1024
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至2705686032@qq.com 举报,一经查实,本站将立刻删除。原文转载: 原文出处: