Nginx: 配置项之events段核心参数用法梳理

news2024/11/28 1:44:56

events 核心参数


看一下配置文件 events 段中常用的一些核心参数

经常使用的参数并不多,比较常配置的就这6个


1 ) use   含义是 nginx使用何种事件驱动模型

  • 这个事件驱动模型和linux操作系统底层的IO事件处理模型有关系
  • 语法:use method
  • method可选值:select、poll、kqueue、epoll、/dev/poll、eventport
    • 这个method不同于我们HTTP的method,在这里是指操作系统底层的一个IO处理模型
    • 一个事件驱动模型采用的一个参数, 比如说以前最早使用的web服务器
    • 像Apache,也就是我们的 httpd 它经常最初使用的是一个select的这样一个模型
    • 那包括后来有改进的其他型
    • 现在新的linux系统操作系统中,一般比较长用的都是 epoll 这样的一个事件驱动模型
    • 这个事件驱动模型是比较先进的,在高并发的系统中经常使用
  • 默认配置:无
  • 推荐配置:不指定,让nginx自己选择
    • 其实在这默认配置的情况下是没有的,不推荐对这个参数做配置
    • 因为在最早的Nginx版本中会需要使用 use 这样一个参数来指定
    • 因为linux可以用在多个平台上, 比如说, Solus 或 惠普unix这些小型服务器上
    • 通常情况下,它有时候早期会有这样一种事件驱动模型: /dev/poll
    • 这个eventport 也是在 Solus 操作系统上
    • 我们实际使用中,也不会去指定,Nginx 会默认选择最优的驱动模型

2 ) worker connections   含义是 worker子进程能够处理的最大并发连接数

  • 语法:worker connections number
  • 默认配置:worker connections 1024
    • 可以看到默认配置是 1024, 但是对在我们生产环境中,尤其对一个高并的系统,这个值是不足以承载的
    • 比如说,你现在有一个8核心的CPU,配置成 1024 的话,每一个 work connections 处理并发连接数是 1024
    • 配置8个worker子进程的话,它的处理能力最高可能也就是到一万左右
    • linux自身有一个最大的打开套接字的一个个数,也就是最大的一个打开文件个数是 65535 的一个上限
    • 是由我们操作系统本身所决定的,所以说,你这个work_connections 即使 20 w,也没有太大意义
    • 但是在很多的生产环境中,还是能是能够看到这样的配置,比如配置成 10 w
    • 最起码来说,你现在即使有一个worker子进程的话,也不会被操作系统所限
    • 虽然达不到 10 w,但是也能够充分去利用操作系统来尽可能提高并发连接的一个请求数
  • 推荐配置:worker_connections 65535/worker_processes | 65535
    • 比如在 main 段中, worker_processes 是 4,那就是 65535 / 4 取整
    • 直接配置成 65535 也问题不大,这是动态的配置,可在高性能的nginx服务器上配置更高的数值

3 ) accept_mutex   含义是 是否打开负载均衡互斥锁

  • 注意,3 和 下面的 4, 5 配合一起使用的
  • 语法:accept_mutex on | off
  • 可选值:on、off
  • 默认配置:accept_mutex off
  • 推荐配置:accept_mutext on
  • 下面看下具体什么是 accept_mutex
  • 在实际的这个环境中,Nginx 的进程结构是有 master 进程,folk 出了多个worker子进程
  • 真正处理请求的是我们的 worker 子进程,现在有一个客户端发送一个 HTTP 请求到 master 主进程
  • 这个时候,master 进程会去找对应的一个 worker process,把这个请求分给它
  • 这里就会涉及到一个问题,就是这个master进程是去找哪一个worker子进程呢?
  • 找到其中一个发送,还是每个都通知一下呢,因为配置了 mutex,也就是互斥开关为 on
  • 在默认关闭 off 的情况下,主进程会群发事件,通知到每一个子worker进程, 这就唤醒了每个子进程
  • 在一个高并发系统里,每一个 worker 进程都在处理很多请求
  • 现在又来了一个,肯定要处理,并且耗费性能
  • 当设置为 on 的时候,意味着每个worker子进程中加上了一个锁 (负载均衡锁)
  • 这个锁会轮流的将请求由 master process 分发给每一个worker

4 ) accept_mutex_delay   含义是 新连接分配给worker子进程的超时时间

  • 前置条件:上面 accept_mutex 配置成 on
  • 语法:accept_mutex_delay time
  • 默认配置:accept_mutex_delay 500ms
  • 推荐配置:accept_mutext_delay 200ms
  • 还是参考上面那个图,当一个新的HTTP请求到来以后, 告诉 master process
  • master process开始去找某一个work子进程来处理,根据负载均衡锁,我们找到了其中某一个
  • 它会轮询的来分配任务,比如第一次分给A worker,第二次分给B worker,…
  • 假如要分配给B worker, 但是它可能正在处理很多的其他并发连接,在繁忙状态,可能响应不过来
  • 在定义了 accept_mutex_delay ,比如值为 500ms, 在这个时间内没有响应,就会分配给其他worker
  • 避免了一直等待的问题,有时候可以为了提高性能,缩小上面的值,比如 200ms, 100ms

5 ) lock_file   含义是 负载均衡互斥锁文件存放路径 【main 段,辅助说明 events 段】

  • 语法: lock_file file
  • 默认配置: lock_file logs/nginx.lock
  • 推荐配置: lock_file logs/nginx.lock 同默认
  • lock_file,其实就是我们的负载进行锁,master process 会去看一下这个锁
  • 每一次需要分配新的请求给某一个worker子进程的时候
  • 会把相关的信息写在这样一个锁文件中
  • 注意,这个字段是在main段中配置的,不属于events
  • 在这里主要是配合 events 字段做相关说明

6 ) muti_accept   含义是 worker子进程可以接收的新连接个数

  • 语法:multi_accept on | off
  • 可选值:on、off
  • 默认配置:multi_accept off
  • 推荐配置:multi_accept on
  • worker 子进程在某一时刻,只能处理一个连接请求
  • 比如说一个新的用户请求到来以后,在某一时刻通常 worker 子进程只会接收一个新的
  • 就说你一次只给我一个新的连接,接收之后,对它进行处理
  • 打开这样一个参数之后,意味着每一个worker子进程一次性能够连接多个APP请求
  • 这个配置对性能的影响是很小的,虽然每一个worker子进程在某一时刻只能处理一个新的连接
  • 但是其实它已经是很高效的,所以,我们打开还是关闭对性能的影响并不大

示例配置


1 ) 主要配置

lock_file logs/nginx.log; # 这个在 main 段中

events {
	worker connections 17500;
	accept_mutex on;
	accept_mutex_delay 100ms;
	multi accept on;
	# use epoll; # 这个一般不指定
}

2 ) 其他注意事项

  • $ touch logs/nginx.log
  • use epoll 这个一般不指定

3 )参考文档

  • ngx_core_module

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062658.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云服务器常见问题及解决方案

1. 性能问题 问题描述:云服务器性能可能会受到多种因素影响,如虚拟化开销、资源竞争等,导致应用程序运行缓慢。 解决方案: 选择合适的实例类型:根据应用需求选择适当的实例类型,如计算优化型、内存优化型…

API篇(Java - 随机器(Random))(doing)

目录 一、Random 1. 简介 2. 什么是种子 3. 相关方法 4. Random对象的生成 5. Random类中的常用方法 6. 使用 6.1. 创建对象 6.2. 生成[0,1.0)区间的小数 6.3. 生成[0,5.0)区间的小数 6.4. 生成[1,2.5)区间的小数 6.5. 生成任意整数 6.6. 生成[0,10)区间的整数 6.…

LCP9回文数[leetcode-9-easy]

LCP,9回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如&#xff…

Vue 3 的 emit 简单使用

在 Vue 3 中使用 emit&#xff0c;子组件可以将事件通知父组件&#xff0c;父组件可以在响应这些事件时执行特定的逻辑。 emit 是一种非常灵活的通信方式&#xff0c;允许组件之间以解耦的方式进行交互。 1. 基本用法 1、使用 defineEmits 子组件 <template><div…

【Hadoop】知识点总结、大学期末复习

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; Yaoyao2024往期回顾&#xff1a; 【论文精读】上交大、上海人工智能实验室等提出基于配准的少样本异常检测框架超详细解读&#xff08;翻译&#xff0b;精读&#xff09;每日一…

关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(四)

文章目录 前提提交的任务有返回值怎么办总结 前提 上一节关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(三)我们分析了以何种方式向线程池提交任务、提交的任务若有参数怎么办&#xff0c;这一节我们分析提交的任务若有返回值怎么办&#xff1f; 提交的任务有返回值…

bootloader相关内容的辨析

在PC机中&#xff0c;BIOS&#xff08;Basic Input/Output System&#xff0c;基本输入输出系统&#xff09;和UEFI&#xff08;Unified Extensible Firmware Interface&#xff0c;统一可扩展固件接口&#xff09;是两种用于初始化系统硬件、加载操作系统启动程&#xff08;如…

nestjs nest-cli.json中的assets不生效

官方文档 Documentation | NestJS - A progressive Node.js framework // nest-cli.json{"collection": "nestjs/schematics","sourceRoot": "src","compilerOptions": {"assets": ["microservices/mail/te…

【宠粉赠书】智能计算系统:从深度学习到大模型 第2版

为了回馈粉丝们的厚爱&#xff0c;今天小智给大家送上一套关于图神经网络的学习宝典——《智能计算系统&#xff1a;从深度学习到大模型 第2版》。下面我会详细给大家介绍这本书&#xff0c;文末留有领取方式。 “只要你想把大模型做得更好、做得更大、做得更快、做得更省电&am…

Docker部署常用开发组件(保姆级教程)

说明 本文总结了一些常用组件的Docker启动命令及过程&#xff0c;在开发过程中只需花费数分钟下载和配置即可完美使用这些服务。 Mysql MySQL 是一种开源关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;目前由 Oracle 公司维护。MySQL 以其高性能、可靠性和易用…

Qt4代码实现下面的界面

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

AI预测体彩排3采取888=3策略+和值012路或胆码测试8月22日升级新模型预测第59弹

经过近60期的测试&#xff0c;当然有很多彩友也一直在观察我每天发的预测结果&#xff0c;得到了一个非常有价值的信息&#xff0c;那就是9码定位的命中率非常高&#xff0c;已到达90%的命中率&#xff0c;这给喜欢打私菜的朋友提供了极高价值的预测结果~当然了&#xff0c;大部…

【C++】map、set基本用法

欢迎来到我的Blog&#xff0c;点击关注哦&#x1f495; 前言: C的STL已经学习很大一部分了&#xff0c;接下来介绍的是map set是c的是两种关联容器。 简单介绍 map set&#xff1a; 两者都使用红黑树作为底层数据结构来存储元素。map是一种键值对容器&#xff0c;其中每个键…

pip package查询网站(性质类似于npmjs.com)

网址&#xff1a;PyPI The Python Package Index python 的依赖包查询网站 就和 node 的 npmjs.com 一样

SD-WAN采用哪种网络技术?如何自建SD-WAN组网?

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;是一种基于软件的网络架构&#xff0c;它利用软件定义网络&#xff08;SDN&#xff09;的技术来管理广域网&#xff08;WAN&#xff09;的连接和服务。SD-WAN的主要目的是提高网络…

四大LLM模型,预训练和后训练新范式详解

导读 最初&#xff0c;大语言模型LLM的训练过程只关注于预训练&#xff0c;但如今已经扩展到包含预训练和后训练两个阶段。后训练通常包括监督指令微调和对齐&#xff0c;这一方法在ChatGPT发布后广泛流行&#xff01; 翻译自:https://magazine.sebastianraschka.com/p/new-l…

基于距离度量学习的异常检测:一种通过相关距离度量的异常检测方法

异常通常被定义为数据集中与大多数其他项目非常不同的项目。或者说任何与所有其他记录(或几乎所有其他记录)显著不同的记录,并且与其他记录的差异程度超出正常范围,都可以合理地被认为是异常。 例如上图显示的数据集中,我们有四个簇(A、B、C和D)和三个位于这些簇之外的点:P1、P…

领夹麦克风哪个牌子的好,2024年无线领夹麦克风十大品牌推荐

在追求高质量音频的时代&#xff0c;一款性能稳定、音质出色的无线领夹麦克风&#xff0c;不仅能够提升内容创作的品质&#xff0c;也是赠予播客爱好者、视频博主的佳礼。然而&#xff0c;市场上的无线领夹麦克风品种繁多&#xff0c;其中不乏一些厂商为追求低成本&#xff0c;…

微软Phi-3.5系列亮相:性能超越Gemini 1.5和GPT-4o

前沿科技速递&#x1f680; 在人工智能领域&#xff0c;微软从未停止过创新的步伐。尽管与OpenAI的合作为微软带来了显著的成功&#xff0c;但他们显然不满足于此。近日&#xff0c;微软再次在AI领域引发关注&#xff0c;正式发布了三款全新的Phi-3.5系列AI模型。这些模型不仅在…

构建基于LLM的应用程序——使用LLM的搜索和推荐引擎

在上一章中&#xff0c;我们介绍了构建对话应用程序的核心步骤。我们从一个基础的聊天机器人开始&#xff0c;然后逐步添加了更复杂的组件&#xff0c;例如记忆、非参数化知识和外部工具。借助LangChain的预构建组件以及Streamlit的UI渲染&#xff0c;这一切都变得相对简单。尽…