11. Nginx 工作机制&参数设置

这篇具有很好参考价值的文章主要介绍了11. Nginx 工作机制&参数设置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


11.1 master-worker 机制

11.1.1 master-worker 工作原理图

11. Nginx 工作机制&参数设置

  1. 一个 master (进程) 管理多个 worker (进程)

11. Nginx 工作机制&参数设置

11.1.2 一说 master-worker 机制

  • 争抢机制示意图

11. Nginx 工作机制&参数设置

  1. 一个 master Process 管理多个 worker process ,也就是说 Nginx 采用的是 多进程结构,而不是多线程结构
  2. 当 client 发出请求 (任务) 时,master Process 会通知管理的 worker process
  3. worker process 开始争抢任务,争抢到的 worker process 会开启连接,完成任务
  4. 每个 worker 都是一个独立的进程,每个进程里只有一个主线程
  5. Nginx 采用了 IO 多路复用机制 (需要在 Linux 环境) ,使用 IO 多路复用机制,是 Nginx 在使用为数不多的 worker process 就可以实现高并发的关键

11.1.3 二说 master-worker 机制

11. Nginx 工作机制&参数设置

  • Master-Worker 模式

1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程
2、Master 进程 接收来自外界的信号,向各 worker 进程发送信号,每个进程都有可能来处理这个连接
3、Master 进程能监控 Worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程

  • accept_mutex 解决 “惊群现象”

1、所有子进程都继承了父进程的 sockfd,当连接进来时,所有子进程都将收到通知并 “争着” 与它建立连接,这就叫 “惊群现象”
2、大量的进程被激活又挂起,只有一个进程可以 accept() 到这个连接,会消耗系统资源
3、Nginx 提供了一个 accept_mutex ,这是一个加在 accept 上的一把共享锁。即每个 worker 进程在执行 accept 之前都需要先获取锁,获取不到就放弃执行 accept() 有了这把锁之后,同一时刻,就只会有一个进程去 accpet(),就不会有惊群问题了
4、当一个 worker 进程在 accept() 这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,完成一个完整的请求
5、一个请求,完全由 worker 进程来处理,而且只能在一个 worker 进程中处理

  • 用多进程结构而不用多线程结构的好处

1、节省锁带来的开销,每个 worker 进程都是独立的进程,不共享资源,不需要加锁。在编程以及问题查找上,也会方便很多
2、独立进程,减少风险。采用独立的进程,可以让互相之间不会影响,一个进程退出后,其它进程还在工作,服务不会中断,master 进程则很快重新启动新的 worker 进程

  • 实现高并发的秘密 - IO 多路复用

1、对于 Nginx 来讲,一个进程只有一个主线程,那么它是怎么实现高并发的呢?
2、采用了 IO 多路复用的原理,通过异步非阻塞的事件处理机制,epoll 模型,实现了轻量级和高并发
3、nginx 是如何具体实现的呢?

  • 举例来说:每进来一个 request,会有一个 worker 进程去处理。但不是全程的处理,处理到什么程度呢?
  • 处理到可能发生阻塞的地方,比如向上游 (后端) 服务器转发 request,并等待请求返回
  • 那么,这个处理的 worker 不会这么傻等着,他会在发送完请求后,注册一个事件:“如果 upstream 返回了,告诉我一声,我再接着干”。于是他就休息去了
  • 此时,如果再有 request 进来,他就可以很快再按这种方式处理
  • 而一旦上游服务器返回了,就会触发这个事件,worker 才会来接手,这个 request 才会接着往下走
  • 由于 web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多,这就是几个进程就能解决高并发的秘密所在
  • 小结:Nginx 的 master-worker 工作机制的优势

1、支持 nginx -s reload 热部署,这个特征在前面我们使用过
2、对于每个 worker 进程来说,独立的进程,不需要加锁,所以省掉了锁带来的开销,同时在编程以及问题查找时,也会方便很多
3、每个 worker 都是一个独立的进程,但每个进程里只有一个主线程,通过异步非阻塞的方式 / IO 多路复用 来处理请求, 即使是高并发请求也能应对
4、采用独立的进程,互相之间不会影响,一个 worker 进程退出后,其它 worker 进程还在工作,服务不会中断,master 进程则很快启动新的 worker 进程
5、一个 worker 分配一个 CPU , 那么 worker 的线程可以把一个 cpu 的性能发挥到极致

11.2 参数设置

11.2.1 worker_processes

  • 需要设置多少个 worker ?每个 worker 的线程可以把一个 cpu 的性能发挥到极致。所以 worker 数和服务器的 cpu 数相等是最为适宜的。设少了会浪费 cpu,设多了会造成 cpu 频繁切换上下文带来的损耗
  • 设置 worker 数量,Nginx 默认没有开启利用多核 cpu,可以通过增加 worker_cpu_affinity 配置参数来充分利用多核 cpu 的性能
#2 核 cpu,开启 2 个进程
worker_processes 2;
worker_cpu_affinity 01 10;

#2 核 cpu,开启 4 个进程,
worker_processes 4;
worker_cpu_affinity 01 10 01 10;

#4 核 cpu,开启 2 个进程,0101 表示开启第一个和第三个内核,1010 表示开启第二个和第四个内核;
worker_processes 2;
worker_cpu_affinity 0101 1010;

#4 个 cpu,开启 4 个进程
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

#8 核 cpu,开启 8 个进程
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
  • worker_cpu_affinity 理解

11. Nginx 工作机制&参数设置

11. Nginx 工作机制&参数设置

11.2.1 worker_processes 配置实例

  1. vim /usr/local/nginx/nginx.conf ,修改配置文件

11. Nginx 工作机制&参数设置

  1. 重新加载 nginx ,/usr/local/nginx/sbin/nginx -s reload

  2. 查看 nginx 的 worker process 情况 ps -ef | grep nginx

11. Nginx 工作机制&参数设置

11.2.3 worker_connection

  1. worker_connection 表示每个 worker 进程所能建立连接的最大值,所以,一个 nginx 能建立的最大连接数,应该是 worker_connections * worker_processes

    ① 默认:worker_connections: 1024
    ② 调大:worker_connections: 60000(调大到 6 万连接)
    同时要根据系统的最大打开文件数来调整

  • 系统的最大打开文件数>= worker_connections*worker_process
  • 根据系统的最大打开文件数来调整,worker_connections 进程连接数量要小于等于系统的最大打开文件数
  • worker_connections 进程连接数量真实数量= worker_connections * worker_process
  • 查看系统的最大打开文件数: ulimit -a | grep "open files"

11. Nginx 工作机制&参数设置

  1. 根据最大连接数计算最大并发数

    • 如果是支持 http1.1 的浏览器每次访问要占两个连接,所以普通的静态访问最大并发数是: worker_connections * worker_processes /2
    • 而如果是 HTTP 作为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/4
    • 因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会各占用两个连接
    • 看一个示意图

11. Nginx 工作机制&参数设置

11.2.4 配置 Linux 最大打开文件数

  1. 使用 ulimit -a 可以查看当前系统的所有限制值,使用 ulimit -n 可以查看当前的最大打开文件数

  2. 新装的 linux 默认只有 1024,当作负载较大的服务器时,很容易遇到 error: too many open files 因此,需要将其改大

  3. 使用 ulimit -n 65535 可即时修改,但重启后就无效了 (注 ulimit -SHn 65535 等效 ulimit -n 65535,-S 指 soft,-H 指 hard)

  4. 有如下三种修改方式:

    ① 在 /etc/rc.local 中增加一行 ulimit -SHn 65535
    ② 在 /etc/profile 中增加一行 ulimit -SHn 65535
    ③ 在 /etc/security/limits.conf 最后增加如下两行记录,然后重启系统

* soft nofile 65535
* hard nofile 65535
  • 注意:在 CentOS 中使用第 ① 种方式无效果,使用第 ③ 种方式有效果,而在 Debian 中使用第 ② 种有效果

11. Nginx 工作机制&参数设置

  1. 如果重启系统,报内核错误,需要编辑 /etc/pam.d/login 配置文件,在最后添加以下一条内容:
 vim /etc/pam.d/login 
session    required     pam_limits.so

11. Nginx 工作机制&参数设置

  • 编辑完成,重启系统,就会发现最大文件数已经配置成功

11. Nginx 工作机制&参数设置文章来源地址https://www.toymoban.com/news/detail-410333.html

到了这里,关于11. Nginx 工作机制&参数设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Nginx的proxy buffer参数设置

    1. proxy_buffering 作用:该指令开启从后端被代理服务器的响应body缓冲。     如果proxy_buffering开启,nginx假定被代理的后端服务器会以最快速度响应,并把内容保存在由指令 proxy_buffer_size 和 proxy_buffers 指定的缓冲区里边.     如果响应body无法放在内存里边,那么部分内容会被写到磁

    2024年02月08日
    浏览(43)
  • Ceph入门到精通-Nginx超时参数分析设置

    nginx中有些超时设置,本文汇总了nginx中几个超时设置 Nginx 中的超时设置包括: “client_body_timeout”:设置客户端向服务器发送请求体的超时时间,单位为秒。 “client_header_timeout”:设置客户端向服务器发送请求头的超时时间,单位为秒。 “send_timeout”:设置服务器向客户端

    2024年02月07日
    浏览(41)
  • Nginx proxy_set_header参数设置

    不设置 proxy_set_header Host 时,浏览器直接访问 nginx,获取到的 Host 是 proxy_pass 后面的值,即 $proxy_host 的值,参考Module ngx_http_proxy_module 1 2 3 4 5 6 7 8 # cat ngx_header.conf server {      listen 8090;      server_name _;      location / {          proxy_pass http: //172 .31.5.0:5000;      } } 结果

    2024年04月16日
    浏览(32)
  • 01_什么是ansible、基本架构、ansible工作机制、Ansible安装、配置主机清单、设置SSH无密码登录等

    1.什么是ansible 1.1.基本介绍 1.2.基本架构 1.3.基本特征 1.4.优点 1.5.ansible工作机制 2.Ansible安装 2.1.机器准备 2.2.安装ansible 2.2.1.安装epel源 2.2.2.安装ansible 2.2.3.查看ansible版本 2.2.4.树状结构展示文件夹 2.2.4.1.其中ansible.cfg的内容如下 2.2.4.2.host的默认内容是 2.3.配置主机清单 2.4.设置

    2024年02月14日
    浏览(43)
  • 解决Worker 1 failed executing transaction ‘ANONYMOUS‘ at master log mall-mysql-bin.000001, end_log_pos

    在Docker中配置MySQL主从服务器时遇到的问题。 如下错误解决: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ‘ANONYMOUS’ at master log mall-mysql-bin.000001, end_log_pos 2251. See error log and/or performance_schema.replication_applier_status_by_wo

    2023年04月12日
    浏览(74)
  • 关于yolov5训练时参数workers和batch-size的理解

    yolov5的训练很简单,下载好仓库,装好依赖后,只需自定义一下data目录中的yaml文件就可以了。这里我使用自定义的my.yaml文件,里面就是定义数据集位置和训练种类数和名字。 一般训练主要需要调整的参数是这两个: workers 指数据装载时cpu所使用的线程数,默认为8。代码解

    2023年04月13日
    浏览(34)
  • Windows 11 设置开启S3深度睡眠 仅保留内存工作 最省电的睡眠模式 禁用现代待机 解决睡眠后主机还在运行风扇还在转

    轻薄笔记本本也许S0级别的睡眠是可以使用的,因为本身其就不费电,但是游戏本往往都是高能耗,又或者直接上的台式机降功率的CPU,S0级别的睡眠可能一晚上就直接没电了,属实玩不起。 睡眠状态 在 Windows 10 电脑上可用 |教程 (tenforums.com) 系统电源状态 - Win32 应用|微软学

    2024年02月05日
    浏览(119)
  • 【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析

    Elasticsearch,作为当今最流行的开源搜索和分析引擎,以其分布式、可扩展和高可用的特性赢得了广大开发者的青睐。在Elasticsearch的分布式架构中,集群的稳健性和高可用性很大程度上依赖于其Master节点的选举机制。本文将深入剖析Elasticsearch的Master选举过程,帮助读者更好地

    2024年04月17日
    浏览(39)
  • 11、Flink配置flink-conf.yaml详细说明(HA配置、checkpoint、web、安全、zookeeper、historyserver、workers、zoo.cfg)

    一、Flink 专栏 Flink 专栏系统介绍某一知识点,并辅以具体的示例进行说明。 1、Flink 部署系列 本部分介绍Flink的部署、配置相关基础内容。 2、Flink基础系列 本部分介绍Flink 的基础部分,比如术语、架构、编程模型、编程指南、基本的datastream api用法、四大基石等内容。 3、

    2024年02月11日
    浏览(37)
  • uboot下UCLASS框架详解---结合项目工作中spi master和flash驱动开发

    本文通过如何通过编写特定板子的spi master驱动从而识别到spi norflash设备,完成norflash设备的读写。 2.1 uclass uclass可以理解为一些具有相同属性的udevice对外操作的接口,uclass的驱动是uclass_driver,主要为上层提供接口。 udevice的是指具体设备的抽象,对应驱动是driver,driver主要负

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包