events 配置块介绍

上章节给出了一个完整的 nginx 配置示例,本章节将介绍 nginx.conf 配置中的 events 模块。

events 模块中包含了 nginx 中所有处理连接的设置,常用配置项如下:

#user  nobody;
worker_processes  1;
# ...

events {
    use epoll;
    accept_mutex on;
    multi_accept on;
    worker_connections 20000;
    client_header_buffer_size 4k;
    open_file_cache max=2000 inactive=60s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 1;
}

下面将逐一介绍 events 中的配置,如下:

use

use 指令用来指定要使用的连接处理方法。通常不需要显式指定它,因为 nginx 默认会使用最有效的方法。

“use epoll;” 指定使用 epoll 的 I/O 模型来处理连接,与 apache 类似,nginx 针对不同的操作系统,有不同的事件模型

(1)标准事件模型

Select、poll 属于标准事件模型,如果当前系统不存在更有效的方法,nginx 会选择 select 或 poll

(2)高效事件模型

  • Kqueue:用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X。注意:使用双处理器的 MacOS X 系统使用 kqueue 可能会造成内核崩溃。

  • Epoll:用于 Linux 内核 2.6+ 版本的系统。

  • /dev/poll:用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。

  • Eventport:用于 Solaris 10.。注意:为了防止出现内核崩溃的问题,有必要安装安全补丁

使用 cat /proc/version 命令,可以查看 Linux 的版本信息:

$ cat /proc/version
Linux version 2.6.32-504.23.4.el6.x86_64 (mockbuild@c6b9.bsys.dev.centos.org)
(gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) )

accept_mutex

用来设置网路连接序列化,防止惊群现象发生,默认为 on。

什么是惊群现象?

惊群效应(thundering herd)是指多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群效应。

multi_accept

设置是否允许同时接受多个网络连接,只能在 events 模块设置。

Nginx 服务器的每个工作进程可以同时接受多个新的网络连接,但是需要在 nginx.conf 配置文件中配置,此指令默认为关闭(multi_accept on),即默认为一个工作进程只能一次接受一个新的网络连接,打开后可同时接受多个链接。

worker_connections

设置工作进程的最大连接数,理论上每台 Nginx 服务器的最大连接数为 worker_processes*worker_connections。其中,worker_processes 为指定的工作进程数量。

client_header_buffer_size

客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为系统分页大小。

在 Linux 系统下查看分页可以使用如下命令:

hxstrive@ubuntu:~/Desktop$ getconf PAGESIZE
4096

上面显示,Ubuntu 20.04 LTS 默认分页大小为 4K。

open_file_cache

配置缓存,为打开的文件指定缓存,默认是没有启用的。max 参数指定缓存最大数量,建议和打开文件数一致。inactive 参数指经过多长时间文件没有被请求(或没有被使用)后删除缓存。打开文件最大数量为我们在 main 配置的 worker_rlimit_nofile 参数,worker_rlimit_nofile 参数用来为工作进程设置文件描述符的限制。

open_file_cache_valid

配置多长时间检查一次缓存的有效信息。如果有一个文件在 inactive 时间内一次都没被使用,它将被从缓存移除。

open_file_cache_min_uses

配置缓存中的文件在 open_file_cache 指令中的 inactive 参数(open_file_cache max=2000 inactive=60s;)指定的时间内文件的最少使用次数。如果超过这个数字,文件描述符一直是在缓存中打开的。如果有一个文件在 inactive 时间内一次没被使用,它将被从缓存移除。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号