nginx优化(持续更新!!!)

1.调整文件描述符

# 查看当前系统文件描述符限制
ulimit -n# 永久修改文件描述符限制
# 编辑 /etc/security/limits.conf 文件,添加以下内容
* soft nofile 65535
* hard nofile 65535# 编辑 /etc/sysctl.conf 文件,添加以下内容
fs.file-max = 65535

2.调整内核参数

vim /etc/sysctl.conf
net.core.somaxconn = 65535  # 最大连接队列长度
net.core.netdev_max_backlog = 65535  # 网络设备最大队列长度
net.ipv4.tcp_max_syn_backlog = 65535  # SYN 队列长度
net.ipv4.tcp_max_tw_buckets= 65535   #TIME_WAIT状态的连接的最大数量
net.ipv4.tcp_tw_reuse = 1  # 允许重用 TIME_WAIT 连接
net.ipv4.tcp_tw_recycle = 1  # 快速回收 TIME_WAIT 连接
net.ipv4.tcp_fin_timeout = 30  # FIN 超时时间
fs.file-max = 2097152  #系统支持的最大文件描述符数

3.nginx配置优化
1.worker_processes
worker_processes directive指定nginx worker进程的数量。

worker_processes 1;
#  lscpu命令来找出CPU的核数。

2.accept_mutex
accept_mutex参数的意义:当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态。

events {accept_mutex on;}

3.accept_mutex_delay
当accept_mutex功能启用后,只有一个持有mutex锁的worker进程会接受并处理请求,其他worker进程等待。accept_mutex_delay指定的时间就是这些worker进程的等待时间,过了等待时间下一个worker进程便取得mutex锁,处理请求。accept_mutex_delay在events模块中指定,默认的值为500ms。

events {accept_mutex_delay 500ms;}

4.worker_connections
worker_connections的默认值是512,它在events模块中。它指定了一个worker进程在同一时间可以处理的最大请求数。

events {worker_connections 512;}

5.worker_rlimit_nofile
worker_rlimit_nofile directive,可以用来设置系统可用的文件描述符。这与ulimit设置可用文件描述符的作用是一样的。如果它们都设置了可用文件描述符,那么worker_rlimit_nofile会覆盖ulimit的设置。

worker_rlimit_nofile 20960;

6.multi_accept
multi_accept可以让nginx worker进程尽可能多地接受请求。它的作用是让worker进程一次性地接受监听队列里的所有请求,然后处理。如果multi_accept的值设为off,那么worker进程必须一个一个地接受监听队列里的请求。

events {multi_accept on;}

7.use
指定事件模型,epoll适用于Linux,能提高性能.

events {use epoll;}

8.sendfile
当一个程序需要传输文件时,Linux内核首先将文件数据缓冲,然后将文件数据传送给程序缓冲,最后程序将文件数据传输到目的地。Sendfile方法是一种数据传输的更高效的方法,数据在内核中的文件描述符之间传输,而不需要将数据传输给程序缓冲。这种方法的结果是改善了对操作系统资源的利用。
我们可以用sendfile directive来启用sendfile方法,在http,server,location三个模块都可以定义。

http {sendfile on ;}

9.TCP_NODELAY
禁用Nagle算法,减少延迟

 http {tcp_nodelay on;}

10.TCP_CORK
减少网络包的数量,提高传输效率

http {tcp_nopush on;}

11.keepalive_timeout
长连接超时时间,单位秒

http {# 连接和请求超时设置keepalive_timeout  65; # 长连接超时时间,单位秒client_body_timeout 60; # 读取客户端请求主体的超时时间client_header_timeout 60; # 读取客户端请求头的超时时间send_timeout 60; # 向客户端发送响应的超时时间
}

12.client_body_timeout 60
读取客户端请求主体的超时时间

http {# 连接和请求超时设置keepalive_timeout  65; # 长连接超时时间,单位秒client_body_timeout 60; # 读取客户端请求主体的超时时间client_header_timeout 60; # 读取客户端请求头的超时时间send_timeout 60; # 向客户端发送响应的超时时间
}

13.client_header_timeout 60
读取客户端请求头的超时时间

http {# 连接和请求超时设置keepalive_timeout  65; # 长连接超时时间,单位秒client_body_timeout 60; # 读取客户端请求主体的超时时间client_header_timeout 60; # 读取客户端请求头的超时时间send_timeout 60; # 向客户端发送响应的超时时间
}

14.send_timeout 60
向客户端发送响应的超时时间

http {# 连接和请求超时设置keepalive_timeout  65; # 长连接超时时间,单位秒client_body_timeout 60; # 读取客户端请求主体的超时时间client_header_timeout 60; # 读取客户端请求头的超时时间send_timeout 60; # 向客户端发送响应的超时时间
}

15.client_max_body_size
允许客户端请求的最大大小,超过此大小会返回413错误

http{client_max_body_size 10m;
}

16.Gzip压缩配置
gzip压缩功能主要用于在服务器端对响应内容进行压缩,然后将压缩后的数据发送给客户端(如浏览器),客户端收到后会自动解压缩并使用。

http{# Gzip压缩配置gzip  on; # 开启Gzip压缩gzip_vary on; # 根据客户端是否接受Gzip来决定是否压缩gzip_comp_level 6; # 压缩级别,1-9,6是速度和压缩率的平衡点gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 需要压缩的MIME类型
}

17.worker_cpu_affinity
将每个 worker 子进程与我们的 cpu 物理核心绑定。

worker_cpu_affinity 0001 0010 0100 1000; # 4个物理核心,4个worker子进程

18.worker_priority
指定 worker 子进程的 nice 值,以调整运行 Nginx 的优先级,通常设定为负值,以优先调用 Nginx 。

worker_priority -10; # 120-10=110,110就是最终的优先级

Linux 默认进程的优先级值是120,值越小越优先;nice 定范围为 -20 到 +19 。
[备注] 应用的默认优先级值是120加上 nice 值等于它最终的值,这个值越小,优先级越高。
19.worker_shutdown_timeout
指定 worker 子进程优雅退出时的超时时间。

worker_shutdown_timeout 5s;
timer_resolution

worker 子进程内部使用的计时器精度,调整时间间隔越大,系统调用越少,有利于性能提升;反之,系统调用越多,性能下降。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/73693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apache连接池机制讨论

apache连接池的连接有效性 server一般会配置keep-alive超时时间,过了这个时间还没新请求到来,则关闭连接。客户端从连接池里拿出连接时,会检查一下连接是否已关闭,如已关闭,会丢弃掉该连接,并尝试从连接池…

【QT5 多线程示例】条件变量

文章目录 条件变量使用 wakeOne()使用 wakeAll() 条件变量 QT的条件变量类是QWaitCondition,有wakeOne() 和 wakeAll() 两个方法 wakeOne():仅唤醒一个等待的线程。wakeAll():唤醒所有等待的线程。 使用 wakeOne() https://github.com/Bi…

备赛蓝桥杯之第十六届模拟赛第1期职业院校组第四题:世纪危机(人口增长推算)

提示:本篇文章仅仅是作者自己目前在备赛蓝桥杯中,自己学习与刷题的学习笔记,写的不好,欢迎大家批评与建议 由于个别题目代码量与题目量偏大,请大家自己去蓝桥杯官网【连接高校和企业 - 蓝桥云课】去寻找原题&#xff0…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

OpenBMC:BmcWeb 生效路由2 Trie字典树

OpenBMC:BmcWeb 生效路由1 基于method分类路由_openbmc web-CSDN博客 可以看到,在internalAdd中: std::vector<BaseRule*> rules; rules.emplace_back(ruleObject); trie.add(rule, static_cast<unsigned>(rules.size() - 1U)); ruleObject首先被放入了每个meth…

Appium中元素定位之一组元素定位API

应用场景 和定位一个元素相同&#xff0c;但如果想要批量的获取某个相同特征的元素&#xff0c;使用定位一组元素的方式更加方便 在 Appium 中定位一组元素的 API 与定位单个元素的 API 类似&#xff0c;但它们返回的是一个元素列表&#xff08;List<MobileElement>&am…

第五周日志-重新学汇编(2)

机器语言 汇编语言(直接在硬件上工作——硬件系统结构&#xff09;&#xff1a; 1.机器语言 每一种微处理器硬件设计和内部结构不同&#xff08;决定了电信号不同&#xff0c;进而需要不同的机器指令&#xff09; #早期通过纸带机/卡片机输入计算机&#xff0c;进行运算 2…

【9】Strongswan collections —— enumerator

//以目录枚举为例子&#xff0c;说明enumerator&#xff0c;从源码剥离可运行 #include <stdio.h> #include <stdbool.h> #include <dirent.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h&…

谈谈对spring IOC的理解,原理和实现

一、IoC 核心概念 1. 控制反转&#xff08;Inversion of Control&#xff09; 传统编程中对象自行管理依赖&#xff08;主动创建&#xff09;&#xff0c;而IoC将控制权转移给容器&#xff0c;由容器负责对象的创建、装配和管理&#xff0c;实现依赖关系的反向控制。 2. 依赖…

【Hugging Face 开源库】Diffusers 库 —— 扩散模型

Diffusers 的三个主要组件1. DiffusionPipeline&#xff1a;端到端推理工具__call__ 函数callback_on_step_end 管道回调函数 2. 预训练模型架构和模块UNetVAE&#xff08;Variational AutoEncoder&#xff09;图像尺寸与 UNet 和 VAE 的关系EMA&#xff08;Exponential Moving…

甘肃旅游服务平台+论文源码视频演示

4 系统设计 4.1系统概要设计 甘肃旅游服务平台并没有使用C/S结构&#xff0c;而是基于网络浏览器的方式去访问服务器&#xff0c;进而获取需要的数据信息&#xff0c;这种依靠浏览器进行数据访问的模式就是现在用得比较广泛的适用于广域网并且没有网速限制要求的小程序结构&am…

路由选型终极对决:直连/静态/动态三大类型+华为华三思科配置差异,一张表彻底讲透!

路由选型终极对决&#xff1a;直连/静态/动态三大类型华为华三思科配置差异&#xff0c;一张表彻底讲透&#xff01; 一、路由&#xff1a;互联网世界的导航系统二、路由类型深度解析三者的本质区别 三、 解密路由表——网络设备的GPS华为&#xff08;Huawei&#xff09;华三&a…

【RAG综述系列】之 RAG 相关背景和基本原理

系列文章&#xff1a; 【RAG综述系列】之 RAG 相关背景和基本原理 【RAG综述系列】之 RAG 特点与挑战以及方法与评估 【RAG综述系列】之 RAG 先进方法与综合评估 【RAG综述系列】之 RAG 应用和未来方向 正文&#xff1a; 检索增强生成&#xff08;Retrieval-Augmented Gen…

CMake 构建的Qt 项目中的构建套件的配置

在Qt 框架中&#xff0c;使用CMake 构建工具时&#xff0c;需要自己给构建套件添加相关配置&#xff0c;否则已经添加的构建套件将不可选择使用。 创建CMake 项目后&#xff0c;如果打开项目配置时&#xff0c;出现如下构建套件不可选的情况&#xff0c; 需要先确认是否安装…

本地化智能运维助手:基于 LangChain 数据增强 和 DeepSeek-R1 的K8s运维文档检索与问答系统 Demo

写在前面 博文内容为基于 LangChain 数据增强 和 Ollams 本地部署 DeepSeek-R1实现 K8s运维文档检索与问答系统 Demo通过 Demo 对 LEDVR 工作流&#xff0c; 语义检索有基本认知理解不足小伙伴帮忙指正 &#x1f603;,生活加油 我看远山&#xff0c;远山悲悯 持续分享技术干货…

Kotlin when 表达式完全指南:从基础到高级的12种实战用法

掌握 when 的灵活运用&#xff0c;告别繁琐的 if-else 链 以下是 Kotlin 中 when 表达式的 12种核心用法 的全面总结&#xff0c;涵盖基础到高级场景&#xff0c;并附带实用示例&#xff1a; 一、基础用法 1. 替代 Java 的 switch-case when (x) {1 -> println("一&qu…

新加坡 PSB 认证:安全标准、证书特点及申请注意事项

目录 什么是PSB认证&#xff1f; 涉及产品范围 强制性认证产品类别 自愿性认证产品 认证项目与测试标准 1. 安全测试 2. 电磁兼容性&#xff08;EMC&#xff09;测试 3. 能效测试&#xff08;特定产品&#xff09; 认证流程详解 第一步&#xff1a;准备阶段 第二步&a…

UE4学习笔记 FPS游戏制作26 UE中的UI

文章目录 几个概念创建一个UI蓝图添加UI获取UI的引用 切换设计器和UI蓝图将UI添加到游戏场景锚点轴点slotSizeToContent三种UI数据更新方式函数绑定属性绑定事件绑定 九宫格分割图片 几个概念 UMG&#xff1a;UE的UI编辑器 slate UI: UE的UI的编辑语言 创建一个UI蓝图 右键用…

HttpRunner v4.x 远程调用实践指南

一、基于 SSH 的远程执行方案 1. 环境准备流程 在目标服务器部署 HttpRunner 运行时环境&#xff1a; # 远程服务器执行&#xff08;需 Golang 1.18 和 Python 3.8&#xff09; curl -ksSL https://httprunner.com/script/install.sh | bash配置免密登录&#xff08;本地机器…

头条项目的文章延迟发布功能

最近做的头条项目其中有个功能是创作者发表的文章可以设置在未来某个时间发表&#xff0c;在实现这个功能的时候就在想该怎么实现呢&#xff1f;刚开始想的是利用Spring的定时任务定时的去数据库中查询&#xff0c;可以这个查询频率该怎么设置&#xff0c;每次从数据库中需要查…