HTTP 块是 Nginx 配置的核心部分,对连接处理行为的设置很多都需要在此块中进行设置,其中包括负责负载均衡的 upstream 块,对虚拟主机进行配置的 server 块,以及反向代理location 块等 。网络连接设置,配置文件优化如下:
(a) 网络连接超时设置通过设置连接超时时间上限,可以在请求连接超时后,对其进行关闭,将超时连接所占用的系统资源进行释放 。在面对高并发数量请求时,可以提供更好的资源利用率和服务效率 。
tcp_nodelay on; SO_REUSEPORT
(4)文件缓存设置,配置文件优化如下:
sendfile 指令指定 Nginx 是否调用 Linux 的系统函数 sendfile()来发送文件 。如果服务器用来进行下载等对磁盘 I/O 消耗高的操作,可以设置为 off;如果对于普通应用必须设定为 on,sendfile()函数用以提高文件的发送效率 。
open_file_cache 指令用于开启文件缓存功能 。max 为缓存的数量上限,应和worker_connections数量保持一致,inactive 设定一个时间,当文件在此时间内没被请求,则系统会删除缓存 。
open_file_cache_valid 用来指定检查缓存有效性的时间间隔 。
open_file_cache_min_uses 表示 inactive 时间内文件的最小使用次数,如果小于此值,文件将被删除 。
send_file on; open_file_cache max = 1024 inactive = 30s; open_file_cache_valid 60s; open_file_cache_min_uses 3;
(5)Socket 优化设置,配置文件优化如下:
tcp_nodelay 指令开启后,服务器将不会对数据进行缓存 。reuseport指令用来设置共享 socket 。
reuseport 的设置是用来解决 Nginx 中“惊群”问题 。“惊群”问题是指一个连接来临时会唤醒多个进程对其进行抢夺处理 。
在连接来临时,多个 worker 线程共享一个套接字,这时便会出现多个线程去抢占资源的情况 。传统的 Nginx 在处理这个问题时有两种解决方式:一是配置 accept_mutex on,在 accept()函数调用之前采用锁机制,获得锁的进程才有权对套接字进行处理,但锁机制会影响服务器的性能,另外,这种方式的弊端是所有的 worker 进程都会被唤醒去争夺锁,会对内核资源造成浪费;二是设置 accept_mutex off,这种处理方式虽然少了锁机制,提高了系统响应能力,但会出现“惊群”问题,在 worker 进程数增多时会对系统带来一定性能影响 。
tcp_nodelay on; SO_REUSEPORT
注意:以上这些配置文件仅供参考,根据实际情况去优化 。
(6)reuseport 允许多个套接字监听同一端口,图中 80 端口为 HTTP 默认端口,内核能够在套接字中对传入的连接进行负载均衡,自动选择 worker 进程进行处理,而不必唤醒所有 worker 进程 。采用此种方式进行 SO_REUSEPORT 配置时,需将 accept_mutex 关闭 。配置如下图所示:
文章插图
在 未 开 启SO_REUSEPORT 配置时,请求来临时,由一个套接字 socket 进行绑定和监听并将连接交给各个进程处理;当开启了 SO_REUSEPORT 配置时,多个进程可以同时绑定和监听同一个TCP/UDP 端口,请求交由哪个进程处理由内核决定,实现了在内核层面的负载均衡 。未开启和开启SO_REUSEPORT对比图如下:
文章插图
5.Linux 内核参数优化
默认的 Linux 内核参数无法满足高并发访问量情况对服务器系统的要求,为了满足特定场景的使用需要同时对 Linux 内核参数进行设置,而且当 Nginx 服务器用于不同目的时,对于 Linux 参数的要求都会有很大的不同 。针对以上情况,本文介绍对 Linux 内核参数的优化,使其能够提高 Nginx 对并发请求的服务性能 。
Linux 内核参数选项是通过修改/etc 目录下的 sysctl.conf 文件来更改
(1) fs.file--max = 999999 此参数用来限制一个进程可以同时建立的最大连接数 。Nginx 服务器通过每个 worker 进程来进行实际的请求响应,所以此参数的设置会影响到 Nginx 的最大并发连接数量 。
(2) net.ipv4.tcp_tw_reuse = 1 此参数用来开启重用功能,可以设置为 1 或 0 。当设置为 1 时,服务器上处于 TIME_WAIT状态的请求连接会被系统重新建立 TCP 连接 。
(3) net.ipv4.tcp_fin_timeout = 10 这个参数是用来设置保持在 FIN_WAIT_2 状态的时间 。在一个 TCP 连接关闭过程中,套接字会有一个 FIN_WAIT2 状态到 TIME_WAIT 状态的变化,将此参数设置为 10,可以使套接字更快的进入 TIME_WAIT 状态 。
推荐阅读
- 绿茶功效与作用,绿茶粉的功效与作用,1
- 与王阳明齐名的人 王阳明最好的朋友
- 曼松茶的功效与作用,杨聘号祥凤曼松王子茶全面上市
- 白茶的功效与作用,茉莉毛尖属于什么茶茉莉花茶毛尖的功效与作用
- 龙桑茶的功效与作用,茉莉毛尖属于什么茶茉莉花茶毛尖的功效与作用
- 高考英语听力应试技巧与策略
- 绿茶粉怎么制作面膜,绿茶粉的功效与作用,1
- 碧螺春和龙井功效对比,西湖龙井的功效与禁忌
- 碧螺春茶的功效与作用,碧螺春的功效,喝碧螺春的好处
- 百合枣仁茶的功效,百合花茶的功效作用与泡法