前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx 实战系列之二:Nginx 优化中在 Nginx 侧 和 Linux 系统侧必须要调整优化的参数详细和最佳推荐配置

Nginx 实战系列之二:Nginx 优化中在 Nginx 侧 和 Linux 系统侧必须要调整优化的参数详细和最佳推荐配置

原创
作者头像
Allen.Wu
发布2022-11-16 22:06:15
1.2K0
发布2022-11-16 22:06:15
举报
文章被收录于专栏:后端系统和架构

我的原文链接,Nginx 实战系列之二:Nginx 优化中在 Nginx 侧 和 Linux 系统侧必须要调整优化的参数详细和最佳推荐配置

Nginx 必须要调整优化的参数

Nginx Server 侧必须要调整的参数

Nginx 必须要调整的参数以及线上推荐的最优配置:

代码语言:javascript
复制
backlog=8192;

worker_processes     auto;  
worker_rlimit_nofile 10240; 

worker_connections 10240;

tcp_nopush  on;
tcp_nodelay on;


keepalive_timeout  300s;     
keepalive_requests 1000000;

建议其他调整的参数:

代码语言:javascript
复制
proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;

Linux 系统侧必须要调整的参数

网卡软中断绑定

Nginx 的机器,一般都是独立的机器,因此不建议采用默认 irqbalance 的自动绑定,而是要设置 smp_affinity、smp_affinity_list 的值来自动绑定。

非常关键的一点,就是不能重复绑定,网卡队列和 CPU 一定要一对一绑定,一般来说就是一个队列要绑定一个 CPU。对于万兆网卡,如果队列数超过了 CPU 核数,那么我们可以把网卡队列数调整为 CPU 核数,然后一对一绑定;一定要注意,通过 一个网卡队列需要并只能绑定到一个 CPU 上,不能绑定到多个 CPU 上,否则不会生效。

Linux nf_conntrack 参数

Linux nf_conntrack 是 Linux 网络相关的核心参数,sysctl 可以查看 conntrack 相关的所有数据:

代码语言:javascript
复制
sysctl -a | grep conntrack
  • • 对应 Nginx 的机器 conntrack 一般需要设置 nf_conntrack_max 为 100-200w,而 nf_conntrack_buckets 为 1/4 或者 1/2 倍 nf_conntrack_max,防止桶太大导致性能影响。
  • • 一般设置 nf_conntrack_tcp_timeout_time_wait 为 120,避免值过大从而维护的连接数太多而超过限制,超过连接数的上限后会丢包
  • • 一般设置 hashsize 不能太大,避免在连接数过多时出现较多的 hash 冲突,一般设置为 2-5w 左右,echo 20000 > /sys/module/nf_conntrack/parameters/hashsize
backlog 队列
  • • net.core.somaxconn
    • • 每一个端口最大的 Listen 监听队列的长度。如果这个设置太小从而导致了 Nginx 性能问题的话,我们可以查看内核日志发现这个状态。这个最终需要配合 Nginx listen 指令一起调整
  • • tcp_max_syn_backlog
    • • SYN(待完成连接)队列长度
  • • net.core.netdev_max_backlog
    • • 数据包在发送给 CPU 之前被网卡缓冲的速率;增加该值可以提高具有高带宽的机器的性能

Nginx 机器的推荐设置如下:

代码语言:javascript
复制
echo 32768 > /proc/sys/net/core/somaxconn
echo 819200 > /proc/sys/net/ipv4/tcp_max_syn_backlog
fs 文件描述符
  • • sys.fs.file-max
    • • Linux 系统允许的最大文件描述数,值的大小主要和机器内存有关,一般 32G 内存以上的机器,一般推荐设置为 100w-300w。
  • • nofile
    • • 应用层面允许的最大文件描述符数,一般设置  /etc/security/limits.conf文件
port 端口
  • • net.ipv4.ip_local_port_range
    • • port 端口的范围[net.ipv4.ip_local_port_range=1024 65535]
  • • 对压测端而言,如果是短链接
    • • 表示开启 TCP 连接中 TIME-WAIT sockets 的快速回收,默认为0,表示关闭。压测 client 端需要开启。
    • • 对应 Nginx server 端,这个 tcp_tw_recycle 则要设置为 0
    • • 表示开启端口复用。允许将TIME-WAIT sockets重新用于新的 TCP接,默认为0,表示关闭;
    • • net.ipv4.tcp_tw_reuse = 1
    • • net.ipv4.tcp_tw_recycle = 1

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 我的原文链接,Nginx 实战系列之二:Nginx 优化中在 Nginx 侧 和 Linux 系统侧必须要调整优化的参数详细和最佳推荐配置
    • Nginx 必须要调整优化的参数
      • Nginx Server 侧必须要调整的参数
      • Linux 系统侧必须要调整的参数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档