nginx even块的配置

events 块是 Nginx 配置文件 (nginx.conf) 中的重要部分,用于配置与事件处理相关的参数。它主要定义了 Nginx 服务器如何处理客户端连接,以及控制工作进程的行为。这些配置对于优化服务器性能和稳定性至关重要。

accept_mutex 设置Nginx网络连接序列化

语法 accept_mutex [on | off]
默认值 accept_mutex on;
示例 accept_mutex off;
位置 events 块

accept_mutex 这个配置主要用于解决常说的"惊群"问题。当客户端发送一个请求连接时,Nginx 作为多进程服务器,会同时唤醒多个 worker 进程,但最终只有一个进程能获取到连接。如果每次唤醒的进程数目太多,就会影响 Nginx 的整体性能。

如果将 accept_mutex 设置为 on(开启状态),Nginx 会对多个进程接收连接进行排队,一个接一个地唤醒进程接收连接,从而防止多个进程争抢连接资源,提高性能。然而,是否开启该配置需要根据实际的生产环境来决定。
例如有时候多个客户端发送了多个请求,改配置为on,这个时候这会逐一去唤醒工作进程,实际上比关闭状态下情况还差了些,浪费了询问的时间。
配置示例:
在这里插入图片描述

multi_accept:设置是否允许同时接收多个网络连接

语法 multi_accept [on | off]
默认值 multi_accept off;
示例 multi_accept on;
位置 events 块

multi_accept 的配置决定了 Nginx 的工作进程在有新连接到达时,是一次只处理一个连接,还是一次处理多个连接。

multi_accept off: 默认情况下,每次有新连接到达时,一个工作进程只接受一个连接。这种方式适合普通的请求负载,因为它避免了过多连接堆积在单个进程上,从而导致资源竞争。

multi_accept on: 当启用这个选项时,每次有新连接到达时,一个工作进程会尽可能多地接受新连接。这对于高并发场景是有利的,因为可以一次性处理多个新连接,减少系统调用的开销,提高整体处理效率。
配置示例:
在这里插入图片描述

worker_connections:配置单个worker进程最大的连接数

语法 worker_connections [number]
默认值 worker_connections 1024;
位置 events 块

worker_connections 指令用于设置每个 Nginx 工作进程可以同时处理的最大连接数,这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数,另外,number值不能大于操作系统支持打开的最大文件句柄数量。

可以通过ulimit -n 查看最大文件句柄数量。
ulimit -n
在这里插入图片描述
配置示例
在这里插入图片描述

use:设置Nginx服务器选择哪种事件驱动来处理网络消息

语法 use [方法]
默认值 use select;
示例 use epoll;
位置 events 块

注意:此处所选择事件处理模型是Nginx优化部分的一个重要内容,method的可选值有select/poll/epoll/kqueue等,注意使用epoll需要linux内核在2.6以上才能够使用epoll函数来优化Nginx。

假设 Nginx 服务器是一家餐厅,而事件驱动模型就像餐厅里服务员用来管理桌子的方式:

select: 这是最传统的方式,适用于几乎所有操作系统,但在处理大量连接时效率较低。就像服务员需要逐个查看每张桌子是否有新客人,效率不高。
poll: 这是 select 的改进版本,能够更有效地处理更多的连接。服务员可以查看多个桌子,但还是需要逐个处理。
epoll: 这是 Linux 上最先进的方式,能够高效地处理大量并发连接,适用于高流量的网站。就像服务员有一个智能系统,能够快速找到需要服务的桌子,大大提高了效率。
kqueue: 这是 FreeBSD 上的高效事件驱动模型,类似于 Linux 的 epoll。服务员有一个类似的智能系统,可以快速响应需求。(FreeBSD 是一个类 UNIX 操作系统,基于 BSD (Berkeley Software Distribution) 系统。它主要用于服务器和嵌入式平台,但也可以用作桌面操作系统。)
/dev/poll: 这是 Solaris 上的事件驱动模型,也是一种高效的管理方式。

配置文件配置

events {
    worker_connections  1024;
    accept_mutex on;
    multi_accept on;
    use epoll; #使用epoll
}

另外这些值的选择,我们也可以在编译的时候使用
–with-select_module、#加入到nginx编译环境
–without-select_module、#移除nginx编译环境
–with-poll_module、
–without-poll_module
来设置是否需要将对应的事件驱动模块编译到Nginx的内核。

相关推荐

  1. 解析Nginx配置文件conf中常用

    2024-07-21 11:54:03       49 阅读
  2. NGINX location用法

    2024-07-21 11:54:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 11:54:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 11:54:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 11:54:03       45 阅读
  4. Python语言-面向对象

    2024-07-21 11:54:03       55 阅读

热门阅读

  1. 【无标题】

    2024-07-21 11:54:03       19 阅读
  2. 图像细节增强:锐化处理的实践与分析

    2024-07-21 11:54:03       15 阅读
  3. 堆和栈以及垃圾回收在C#中的使用

    2024-07-21 11:54:03       18 阅读
  4. 我的创作一周年纪念日

    2024-07-21 11:54:03       18 阅读
  5. 第一本SAP项目管理书籍即将连载

    2024-07-21 11:54:03       19 阅读
  6. MySQL入门学习-SQL高级技巧.透视表

    2024-07-21 11:54:03       22 阅读
  7. LeetCode //C - 232. Implement Queue using Stacks

    2024-07-21 11:54:03       18 阅读
  8. redis笔记

    2024-07-21 11:54:03       15 阅读
  9. Mysql、Oracle 审计日志的开启

    2024-07-21 11:54:03       21 阅读
  10. 服务互联:在Eureka中实现服务的依赖注入

    2024-07-21 11:54:03       13 阅读