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

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

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

Nginx 必须要调整优化的参数

Nginx Server 侧必须要调整的参数

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

backlog=8192;
worker_processes     auto;  
worker_rlimit_nofile 10240; 
worker_connections 10240;
tcp_nopush  on;
tcp_nodelay on;
keepalive_timeout  300s;     
keepalive_requests 1000000;

建议其他调整的参数:

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 相关的所有数据:

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 机器的推荐设置如下:

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


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
2天前
|
Linux 应用服务中间件 Shell
linux系统服务二!
本文详细介绍了Linux系统的启动流程,包括CentOS 7的具体启动步骤,从BIOS自检到加载内核、启动systemd程序等。同时,文章还对比了CentOS 6和CentOS 7的启动流程,分析了启动过程中的耗时情况。接着,文章讲解了Linux的运行级别及其管理命令,systemd的基本概念、优势及常用命令,并提供了自定义systemd启动文件的示例。最后,文章介绍了单用户模式和救援模式的使用方法,包括如何找回忘记的密码和修复启动故障。
15 5
linux系统服务二!
|
2天前
|
Linux 应用服务中间件 Shell
linux系统服务!!!
本文详细介绍了Linux系统(以CentOS7为例)的启动流程,包括BIOS自检、读取MBR信息、加载Grub菜单、加载内核及驱动程序、启动systemd程序加载必要文件等五个主要步骤。同时,文章还对比了CentOS6和CentOS7的启动流程图,并分析了启动流程的耗时。此外,文中还讲解了Linux的运行级别、systemd的基本概念及其优势,以及如何使用systemd管理服务。最后,文章提供了单用户模式和救援模式的实战案例,帮助读者理解如何在系统启动出现问题时进行修复。
16 3
linux系统服务!!!
|
4天前
|
应用服务中间件 API nginx
nginx配置反向代理404问题
【10月更文挑战第18天】本文介绍了使用Nginx进行反向代理的配置方法,解决了404错误、跨域问题和302重定向问题。关键配置包括代理路径、请求头设置、跨域头添加以及端口转发设置。通过调整`proxy_set_header`和添加必要的HTTP头,实现了稳定的服务代理和跨域访问。
nginx配置反向代理404问题
|
10天前
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
98 4
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
2天前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
10 2
|
3天前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
9天前
|
缓存 负载均衡 应用服务中间件
Nginx配置
【10月更文挑战第22天】在实际配置 Nginx 时,需要根据具体的需求和环境进行调整和优化。同时,还需要注意配置文件的语法正确性和安全性。
27 7
|
6天前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
40 3
|
7天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
9天前
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###