编程技术分享平台

网站首页 > 技术教程 正文

跟我学Nginx(六)——nginx原理与优化参数配置

xnh888 2024-09-09 09:53:59 技术教程 59 ℃ 0 评论

今天来给大家讲解一下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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表