Nginx 实战系列之三:Nginx TCP backlog 分析优化和性能相关经验汇总

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Nginx 实战系列之三:Nginx TCP backlog 分析优化和性能相关经验汇总

Nginx 实战系列之三:Nginx TCP backlog 分析优化和性能相关经验汇总

Nginx TCP backlog 分析和优化

1,Nginx TCP backlog 配置说明

Nginx TCP backlog 配置,如果是同一个 listen 端口,设置一次就好;比如有多个 server, 每个 server 都是监听 80 端口,只需要给一个 80 端口设置 backlog 就好,一般我们会有一个 default server,在default server 的 80 端口上设置 backlog 的值就可以了;设置好了之后,可以通过 ss -lnt 查看。

backlog 配置多少合适 ?推荐的 Nginx 的经验值是 4096 or 8192,当然,你也可以配置为好几万(一般不用),具体要看是否真有那么多 accept 队列。

2,Nginx backlog 队列满的排查和优化

ListenOverflows、ListenDrops

如果 accept 队列满了,那么就会导致 listen 的端口上出现 ListenOverflows 和 ListenDrops,这个可以通过 netstat -s 来进行统计和排查。

accept 队列满的优化

在我们有充分考虑实际情况、考虑 Nginx 对新连接的处理逻辑、网络状况(如往返时间)等因素之后:

  • • 合理的调大 Nginx Listen 的 backlog 参数,以免 accept 队列被塞满
  • • 比如 Nginx 的 listen 可以调到 8192
  • • 这个参数要小于等于 /proc/sys/net/core/somaxconn 这个内核参数
  • • 合理的调大内核参数 /proc/sys/net/core/somaxconn
  • • 每一个端口最大的 Listen 监听队列的长度,比如设置为 32768
  • echo 32768 > /proc/sys/net/core/somaxconn
  • • 调大内核参数 /proc/sys/net/ipv4/tcp_max_syn_backlog
  • • SYN(待完成连接)队列长度
  • echo 819200 > /proc/sys/net/ipv4/tcp_max_syn_backlog

Nginx 在线上运行中的一些性能相关经验汇总

  • • Nginx 本身的参数优化,大部分人都能做出一些优化处理;但是仅仅依靠 Nginx 本身的参数优化还无法达到我们的诉求;还必须要对 Linux 系统层面的优化有深入研究,这些优化上面都有说明。
  • • 实战中出现问题更多的,是 Linux 系统层面的,尤其是 软中断和 nf_conntrack。
  • • Nginx 在实战中,一定要区分内网、外网,内外网进行分组隔离;也即是内网一组或者多组 Nginx 代理、外网一组或者多组 Nginx 代理
  • • 针对外网的 Nginx 代理,在大型互联网公司,我们都是需要加速卡的,如 Inter 的 QAT 加速卡,因为外网代理会有大量的 HTTPS 请求,加解密、压缩、计算等,可以大大减少 CPU 的开销,没有加速卡,Nginx 机器的 CPU 是扛不住的,如果大量增加 Nginx 机器,又浪费成本,因此,可以增加加速卡、减少 Nginx 机器来提高外网代理层的性能
  • • 要关注大包、小包的不同处理情况,对于小包,CPU 消耗会更多,因为软中断问题、解包头、校验包数据等层面的问题
  • • 短连接的场景下,CPU 的 si 更容易达到性能瓶颈
  • • 目前常规物理机机器,32 核 or 40 核的,一般内存在 32G 左右,网卡一般配置 1-2 个千兆网卡,这个机型,首先出现性能瓶颈点的,不会是 CPU,是网卡带宽
  • 机器的合理选择和配置,对成本控制非常重要,这个是运维和架构师所需考虑的
  • • 尤其是,在公有云上的机型选择,一定要注意,选 CPU 和 网卡最合适的
  • • Nginx 在 CPU 和 Nginx 本身参数等都优化过了之后,接下来的重点,就是日志,Nginx 的 access log 日志从实际情况来看,是必须要输出的,但是输出的话,又会大大影响性能,主要是受磁盘 IO 的性能影响。因此可以考虑如下两个姿势:
  • • 需要有大块内存,来当做 tmpfs
  • • 最后考虑使用 tmpfs
  • • 示例:access_log /www/logs/access.log main buffer=128k;
  • 配置 buffer 一般可以提升 15-20% 左右,这个是最简单的优化方案
  • • 日志写 buffer,配置 buffer 指令,如buffer=128k
  • • 日志写内存文件系统 tmpfs
  • • 最后,从我的工作经验来看,初期最重要的是功能完备性和稳定性,后期才是性能优化的重点


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
30天前
|
缓存 负载均衡 安全
Nginx常用基本配置总结:从入门到实战的全方位指南
Nginx常用基本配置总结:从入门到实战的全方位指南
247 0
|
1月前
|
缓存 前端开发 JavaScript
|
1月前
|
缓存 监控 负载均衡
nginx相关配置及高并发优化
Nginx的高并发优化是一个综合性的过程,需要根据具体的业务场景和硬件资源量身定制。以上配置只是基础,实际应用中还需根据服务器监控数据进行持续调整和优化。例如,利用工具如ab(Apache Benchmarks)进行压力测试,监控CPU、内存、网络和磁盘I/O等资源使用情况,确保配置的有效性和服务的稳定性。
107 0
|
3月前
|
存储 缓存 负载均衡
NGINX 性能调优的五大技巧
【8月更文挑战第27天】
76 5
|
3月前
|
负载均衡 应用服务中间件 网络安全
Django后端架构开发:Nginx服务优化实践
Django后端架构开发:Nginx服务优化实践
58 2
|
3月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
3月前
|
缓存 前端开发 Java
"揭秘!SpringBoot携手Nginx,性能飙升秘籍大公开:轻松掌握配置优化,让你的应用快如闪电!"
【8月更文挑战第11天】随着微服务架构的发展,SpringBoot成为构建RESTful API的首选,Nginx则作为高性能的反向代理服务器提升应用性能。本文将探讨两者如何协同工作,包括Nginx的负载均衡策略、静态资源缓存及数据压缩配置;同时讨论SpringBoot的线程池优化、缓存策略及性能监控。通过这些方法,帮助开发者显著提高系统的整体性能和可用性。
148 1
|
3月前
|
缓存 负载均衡 Java
SpringBoot 与 Nginx 配置优化:性能拉满的关键学习方法
【8月更文挑战第1天】在现代Web开发领域,SpringBoot以其快速启动、简化配置的特性成为众多开发者的首选框架,而Nginx则以其高性能的HTTP和反向代理服务器功能著称。将两者结合,并通过精细的配置优化,可以显著提升Web应用的性能与稳定性。以下是为您学生定制的SpringBoot与Nginx配置优化的学习方法与研究路径。
76 1
|
3月前
|
网络协议 应用服务中间件 测试技术
nginx参数调优能提升多少性能
nginx参数调优能提升多少性能
|
3月前
|
应用服务中间件 Shell nginx
shell分析nginx日志的一些指令
shell分析nginx日志的一些指令