Nginx高并发处理原理
高并发一般是由多进程、多线程和异步机制来处理的,而正好nginx采用了这三种有效的处理高并发的方式 。Nginx的进程模型进程模型采用Master/Worker 方式 。当 nginx 启动的时候,会创建一个 Master 进程,Master进程会根据nginx.conf配置文件中相应的配置项来fork出多个worker子进程去处理请求(怎么处理也是根据配置文件中相应的配置文件) 。
? Master进程负责管理Worker进程的生命周期、处理网络事件、接收外界信号等 。由于Master进程可以fork出多个Worker进程,所以说Nginx是多进程的 。

文章插图
Nginx的线程模型? 线程模型是指worker进程用于接收和处理客户端请求 。每个worker进程可以同时处理多个用户请求 。

文章插图
Nginx的异步处理模型? 异步处理模式是指nginx处理请求的时候是采用I/O多路复用技术(select | poll | epoll 模型),即多个 I/O 可以复用一个进程 。当 worker 进程接收到客户端的请求后,会调用服务端对其请求进行处理,如果没有立即得到响应结果, worker 进程没有阻塞,而是去处理其他请求,知道有请求被服务端处理完成并返回响应结果 。
? 这里的 worker 进程默认就是采用 epoll 多路复用机制来对服务端进行处理的 。当服务端返回响应结果时,回调 epoll 多路复用器,epoll 告知 worker 进程,worker 会挂起当前正在处理的线程,去获取响应结果返回客户端,完成后再去执行被挂起的线程 。整个过程中不会出现等待的情况,所以理论上Ngnix的一个进程就可以处理无限数量的连接,而且无需轮询 。
? 注:worker 进程接收客户端请求不是采用的 epoll 模型,而是互斥锁机制;只有对服务端的请求和响应采用的是 epoll 模型 。

文章插图
Nginx的特点高并发一个nginx的默认并发量为1024,是因为默认一个woker进程,每个进程处理量为1024,故1*1024;但是,在硬件条件满足的条件下,nginx可以支持5~10w的并发量 。具体做法如下:
####################### 操作系统配置 start ########################查看当前会话中所有的linux核心配置,而我们只需要关注open file这项ulimit -a#查看linux系统的“进程最大可打开文件数的设置”,默认时1024ulimit -n#修改“进程最大可打开文件数的设置”vim /etc/security/limit.conf#添加下面两行soft nofile 65535 #应用软件级别限制的最大可打开文件数的限制hard nofile 65535 #操作系统级别限制的最大可打开文件数的限制#文件保存后不会马上生效,所以还得更改当前会话级别的配置ulimit -n 65535####################### 操作系统配置 end ############################################## nginx配置 start ########################修改nginx配置文件(下面两行)vim /src/local/nginx/conf/nginx.confuser root root;worker_processes 4;worker_rlimit_nofile 65535; #这行,看这里看这里#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#pid logs/nginx.pid;events {use epoll;worker_connections 65535; #这行,看这里看这里}#热部署重新加载配置文件nginx -s reload####################### nginx配置 end ############################################## 验证配置是否正确 start ########################查看当前nginx进程信息ps -ef | grep nginxroot10373410 13:27 ?00:00:00 nginx: master process nginxnobody103735 1037340 13:27 ?00:00:00 nginx: worker processroot10512930660 14:50 pts/000:00:00 grep --color=auto nginx#注意,也是看open files这项cat /proc/103735/limits####################### 验证配置是否正确 start ############################################## max client计算方式 start #######################max client = worker_processes * worker_connections或max client = worker_processes * worker_connections / 4#第一种很好理解,进程数*每个进程并发数#第二种为什么要除以4呢?是因为在nginx官网有这么一段话Since a browser opens 2 connections by default to a server and nginx uses the fds (file descriptors) from the same pool to connect to the upstream backend 。#就是说,浏览器会建立两条链接到nginx,而nginx也会建立两条链接到服务端,故就是4####################### max client计算方式 end #######################低消耗一万个非活跃性链接,消耗内存仅暂用2.5M,故对于一般的dos攻击不受影响,但是ddos还是有问题 。热部署可以在7*24小时不间断服务提供,进行版本和配置平滑升级
推荐阅读
- Index MySQL查询合理使用索引:别让你的数据库负重前行
- 月光变奏曲|小甜剧《月光变奏曲》,用平淡展现甜蜜,让你明白什么是人间值得
- 新手小白如何部署服务器,让你的个人电脑成为网站服务器
- 粽子是端午节的必备食物据说在春秋时期 关于端午粽子的由来
- Windows 10快速使用的几个技巧,让你的操作更快捷
- 发型|换发型就像换脸,前后对比大变样,让你美到不敢想象
- 让你彻底明白sql注入攻击
- 这个小工具,让你体验 Windows 10 各个版本
- 记住这几款饮食 让你温暖的度过冬季
- baby被唇纹坑老十岁 8个护唇妙招让你唇色年轻更诱人
