Nginx的性能分析与调优简介
Nginx的性能分析与调优简介
- 一、Nginx的用途
- 二、Nginx负载均衡策略介绍与调优
- 三、其他调优方式简介
- 四、Nginx的性能监控
一、Nginx的用途
Nginx是一种高性能的HTTP和反向代理服务器,最初作为HTTP服务器开发,主要用于服务静态内容如HTML文件、图像、视频等。与传统的Apache相比,Nginx在处理静态文件时表现出色,因为它采用了事件驱动的架构,能够处理大量的并发连接而不会消耗过多的资源。此外,Nginx还可以作为反向代理服务器,接收客户端请求并将其转发到后端服务器处理,从而提高系统的可用性和性能。
Nginx还具备强大的负载均衡功能,可以将客户端请求分发到多个后端服务器,支持多种负载均衡算法,如轮询、最少连接和IP哈希等,从而实现高可用性和扩展性。作为缓存服务器,Nginx可以缓存静态内容和动态生成的页面,减少对后端服务器的请求数量,提高网站的响应速度。
Nginx也属于一种Web中间件1,Nginx不管是在作为Web静态资源访问管理,或者作为动态的请求代理,性能都是非常高效的。当然Nginx有时候也会存在性能瓶颈,需要进行性能分析和调优以支持更高的并发处理能力。
二、Nginx负载均衡策略介绍与调优
在一般情况下,Web中间件最大的作用就是负责对请求进行分发,也就是我们常说的起到负载均衡的作用。当然负载均衡只是 Nginx的作用之一,Nginx常见的负载均衡策略一般包括轮询、指定权重(weight)、ip_hash、least_conn、fair、url_hash等六种。
其中默认执行的策略为轮询,fair和url_hash属于第三方策略,这两种策略不是Nginx自带支持的策略,需要安装第三方的插件来辅助支持。在不同的场景下,每一种策略的选择对系统的整体性能影响都非常大,一般建议根据实际场景和服务器配置来选择对应的负载均衡策略。
序号 | 策略 | 配置方式 | 应用场景 | 简而言之 |
---|---|---|---|---|
1 | 轮询(默认执行) | 如果在upstream中没有指定其他任何的策略时,Nginx会自动执行轮询转发策略,upstream中配置每台服务器的权重都一样,会按照顺序依次转发 | upstream中配置指定的服务器进行轮询,请求会按照接收到的顺序,依次轮询地转发给对应的服务器进行执行;Nginx能自动感知需要转发到的后端服务器是否挂掉,如果挂掉,Nginx会自动将那台挂掉的服务器从upstream中剔除 | 平均转发请求 |
2 | 指定权重 | 通过在upstream配置中给相应的服务器指定weight权重参数来实现按照权重分发请求 | weight参数值的大小和请求转发比率成正比,该配置一般用于后端应用程序服务器硬件配置差异大而导致承受的访问压力不一样的情况 | 按照指定权重比转发请求 |
3 | ip_hash | 通过在upstream配置ip_hash参数 | 每个请求按原始访问ip的hash结果来进行请求转发,由于同一个ip的hash值肯定是不变的,这样每个固定客户端就会只访问一个后端应用程序服务器,该配置一般可解决多个应用程序服务器的session复制和同步的问题,因为同一个ip的请求都转发到了同一台服务器的应用程序上了,所以也就不会有session不同步的问题了。但是这可能会导致后端应用服务器的负载不均的情况,因为在这种策略下后端应用服务器收到的请求数肯定很难一样多 | 按照ip_hash转发请求主要解决session不同步问题 |
4 | least_conn | 通过在upstream配置中增加least_conn配置 | Nginx在接收到请求后会把请求转发给连接数较少的后端应用程序服务器 | 请求优先转发给连接数较少的服务器 |
5 | fair | fair属于第三方策略,即不是Nginx本身自带的策略,需要安装对应的第三方插件 | fair是按照服务器端的响应时间来分配请求给后端应用程序服务器,响应时间短的优先分配 | 响应时间短的优先分配 |
6 | url_hash | url_hash属于第三方策略,也是需要安装对应的第三方插件 | url_hash是按照访问的目标url的hash值来分配请求,使同一个url的请求转发到同一个后端应用程序服务器,请求的分发策略和ip_hash有点类似;在进行性能调优时,主要是适用对缓存命中进行调优,同一个资源(也就是同一个目标url地址)多次请求,可能会到达不同的后端应用程序服务器上,会导致不必要的多次下载。使用url_hash后,可以使得同一个目标url(也就是同一个资源请求)会到达同一台后端应用程序服务器,这样可以在服务端进行资源 缓存,再次收到请求后,就可以直接从缓存中读取了 | 按照url_hash转发请求主要适用于缓存命中调优 |
使用轮询策略时,其他非必填的辅助参数
三、其他调优方式简介
序号 | 调优方式 | 应用场景 | 备注 |
---|---|---|---|
1 | 进程数的配置调优 | 可以配置worker进程数=CPU的核数或者CPU的核数的两倍,还可以将每一个worker进程绑定到不同的CPU核上,这样可以避免出现CPU的争抢 | Nginx服务启动后会包括两个重要的进程:(1)master进程:可以控制Nginx服务的启动、停止、重启、配置文件的重新加载。(2)worker进程处理用户请求信息,将收到的用户请求转发到后端应用服务器上。 |
2 | 事件处理模型调优 | 为了性能得到最优处理,Nginx的连接处理机制在不同的操作系统中一般会采用不同的I/O事件模型 | 在Linux操作系统中,一般使用epoll的I/O多路复用模型;在FreeBSD操作系统中,使用kqueue 的I/O多路复用模型;在Solaris操作系统中,使用/dev/pool方式的 I/O多路复用模型;在Windows操作系统中,使用的icop模型。在实际使用Nginx时,我们也是需要根据不同的操作系统来选择事件处理模型 |
3 | 客户端连接数调优 | 配置Nginx单个进程允许的客户端最大连接数、配置Nginx worker进程可以打开的最大文件数 | |
4 | 文件传输性能调优 | 可以通过修改在nginx.conf配置文件中参数配置进行调优,例如:sendfile、tcp_nopush、tcp_nodelay参数 | |
5 | FastCGI配置调优 | Nginx本身并不支持对外部动态程序的直接调用或者解析,所有的外部编程语言编写的程序(比如Python、PHP)必须通过FastCGI接口才能调用,可以通过配置FastCGI相关参数进行调优 | FastCGI是一个传输快速可伸缩的、用于HTTP服务 器和动态脚本语言间通信的接口,它为所有Internet应用程 序提供了 高性能 , 而不受 Web服务器 API 的限制 。 包括Apache、Nginx在内的大多数Web服务都支持FastCGI,同时FastCGI也被许多脚本语言(例如Python、PHP等)所支持。 |
–补充
客户端连接数调优方式:
1、配置Nginx单个进程允许的客户端最大连接数:
可以修改Nginx中的nginx.conf配置文件中的配置
events #可以设置Nginx的工作模式以及连接数上限{worker_connections 1024;}
2、配置Nginx worker进程可以打开的最大文件数:
可以修改Nginx中的nginx.conf配置文件中的配置
worker_processes 2;
worker_rlimit_nofile 2048; # 设置worker进程可以打开的文件数
四、Nginx的性能监控
Nginx自带了监控模块,但是需要在Nginx编译安装时指定安装监控模块。默认情况下是不会安装该监控模块的,需要指定的编译参数为–with-http_stub_status_module。
编译安装完成后,Nginx的配置文件nginx.conf中还是不会开启监控,需要在配置文件中增加如下配置,其中allow 192.168.1.102 代表允许访问监控页面的IP地址
修改完配置文件后,通过执行nginx-s reload来重新加载配置信息,然后通过访问http://nginx服务器IP地址:端口号/nginx_status 就可以进入监控页面了
参考书籍《软件性能测试、分析与调优实践之路》
wuu~~又是学到东西的一天!
给自己点个赞!!!
Web中间件一般主要负责静态资源(也可以称作静态请求)的处理和动态请求的转发,而动态请求一般都是由应用中间件来进行处理的。 ↩︎
相关文章:
Nginx的性能分析与调优简介
Nginx的性能分析与调优简介 一、Nginx的用途二、Nginx负载均衡策略介绍与调优三、其他调优方式简介四、Nginx的性能监控 一、Nginx的用途 Nginx是一种高性能的HTTP和反向代理服务器,最初作为HTTP服务器开发,主要用于服务静态内容如HTML文件、图像、视…...
学习threejs,导入CTM格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.ColladaLoader DAE模…...
Lua元表
哈喽,好久没有做记录了,最近刚好有时间打算整理一些基础常用内容,先做一期关于Lua相关的内容热热身。如果内容有误,欢迎大家指出我会积极做出响应。 在Lua中,元表(metatable) 和 元方法…...
pyqt和pycharm环境搭建
安装 python安装: https://www.python.org/downloads/release/python-3913/ python3.9.13 64位(记得勾选Path环境变量) pycharm安装: https://www.jetbrains.com/pycharm/download/?sectionwindows community免费版 换源: pip config se…...
overleaf中的includegraphics设置图片缩放,居中显示
overleaf中的includegraphics设置图片缩放,居中显示 \includegraphics[width=0.5\textwidth]{example.jpg} \centering 在使用 \includegraphics 命令插入图片时,可以通过设置其参数来缩小图片的显示尺寸,以下是几种常见的方法: 设置宽度或高度 按比例缩小宽度:可以使用…...
USB免驱IC读写器QT小程序开发
USB免驱全协议IC卡读写器QT小程序开发,读取15693卡。 QT小程序UI开发界面: QT程序代码mainWindow.cpp代码如下: MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this); }MainWind…...
Wend看源码-Java-集合学习(List)
摘要 本篇文章深入探讨了基于JDK 21版本的Java.util包中提供的多样化集合类型。在Java中集合共分类为三种数据结构:List、Set和Queue。本文将详细阐述这些数据类型的各自实现,并按照线程安全性进行分类,分别介绍非线程安全与线程安全的实现方…...
只谈C++11新特性 - 删除函数
删除函数 背景 在 C11 之前,C 的类默认会生成拷贝构造函数和赋值运算符。这在某些情况下会引发问题,尤其是在我们希望明确禁止某些操作时。假设我们有一个类,它不希望被拷贝,但未明确声明拷贝构造函数和赋值运算符,这…...
uniapp 文本转语音
uniapp 文本转语音 基于 Minimax API 的 UniApp 文本转语音工具,支持文本分段、队列播放、暂停恢复等功能。目前只内置了 Minimax文本转语音Minimax 的语音生成技术以其自然、情感丰富和实时性强而著称 API_KEY、GroupId 获取方法 https://platform.minimaxi.com…...
1.RPC基本原理
文章目录 RPC1.定义2.概念3.优缺点4.RPC结构5.RPC消息协议5.1 消息边界5.2 内容5.3 压缩 6.RPC的实现6.1 divide_protocol.py6.2 server.py6.3 client.py RPC 1.定义 远程过程调用(remote procedure call) 2.概念 广义:所有通过网络进行通讯,的调用统称为RPC调用 狭义:不采…...
如何从 0 到 1 ,打造全新一代分布式数据架构
导读:本文从 DIKW(数据、信息、知识、智慧) 模型视角出发,探讨数字世界中数据的重要性问题。接着站在业务视角,讨论了在不断满足业务诉求(特别是 AI 需求)的过程中,数据系统是如何一…...
PyPika:Python SQL 查询构建器
什么是 PyPika? Pypika 是一个 Python 库,用于构建 SQL 查询。它提供了一种简洁、直观的方式来生成 SQL 语句,而无需手动编写复杂的 SQL 代码。Pypika 的设计哲学是尽可能地接近 SQL 的自然语法,同时利用 Python 的强大功能来简化…...
剑指Offer|LCR 014. 字符串的排列
LCR 014. 字符串的排列 给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。 换句话说,第一个字符串的排列之一是第二个字符串的 子串 。 示例 1: 输入: s1 "ab" s2 "eidbaooo" 输出: True 解…...
通过百度api处理交通数据
通过百度api处理交通数据 1、读取excel获取道路数据 //道路名称Data EqualsAndHashCode public class RoadName {ExcelProperty("Name")private String name; }/*** 获取excel中的道路名称*/private static List<String> getRoadName() {// 定义文件路径&…...
使用亚马逊针对 PyTorch 和 MinIO 的 S3 连接器实现可迭代式数据集
2023 年 11 月,Amazon 宣布推出适用于 PyTorch 的 S3 连接器。适用于 PyTorch 的 Amazon S3 连接器提供了专为 S3 对象存储构建的 PyTorch 数据集基元(数据集和数据加载器)的实现。它支持用于随机数据访问模式的地图样式数据集和用于流式处理…...
c++编译过程初识
编译过程 预处理:主要是执行一些预处理指令,主要是#开头的代码,如#include 的头文件、#define 定义的宏常量、#ifdef #ifndef #endif等条件编译的代码,具体包括查找头文件、进行宏替换、根据条件编译等操作。 g -E example.cpp -…...
Java旅程(五)Spring 框架与微服务架构 了解 JVM 内部原理和调优
在现代企业级应用中,Spring 框架和微服务架构已经成为主流技术,而 Java 虚拟机(JVM)的理解和调优对于保证应用的高性能和稳定性也至关重要。本篇博客将深入讲解 Spring 框架与微服务架构,并进一步探讨 JVM 内部原理和调…...
SWAT-MODFLOW地表水-地下水耦合模型建模;QSWATMOD实现SWAT-MODFLOW联合
SWAT-MODFLOW地表水-地下水耦合建模的应用重要性: 1.全面性:耦合模型能够同时考虑地表水和地下水的相互作用,提供了一个更全面的水文循环模拟框架。2.准确性:通过耦合地表水和地下水模型,可以提高水文模拟的准确性&…...
Azure Function 解决跨域问题
这边前端call本地部署的azure function出现了跨域问题,搜索一下解决方案 直接修改local.setting.json,在其中添加CORS配置为通配符”*”,就行了 local.settings.json {"IsEncrypted": false,"Values": {"PYTHON_E…...
金融租赁系统的创新发展与市场竞争力提升探讨
内容概要 随着经济的快速发展,金融租赁系统逐渐成为金融市场中不可或缺的一环。它不仅提供了灵活的资金解决方案,还促进了企业的资本结构优化与资源配置效率。因此,了解该系统的市场背景与发展现状至关重要。 在现今环境下,新兴…...
Rust: offset祼指针操作
offset是偏移元素个数,不是字节数! fn main(){let student_a Student{id:20240001,name:"张三娃".into(),class_id:3,age:14,grade:1};let student_b Student{id:20240002,name:"李四牛".into(),class_id:3,age:15,grade:1};let …...
【C#】WPF设置Separator为垂直方向
1. 方法1 <Separator BorderBrush"Gray"><Separator.LayoutTransform><RotateTransform Angle"90" /></Separator.LayoutTransform> </Separator>2. 方法2 <Separator Style"{StaticResource {x:Static ToolBar.S…...
常见的限流算法
常见的限流算法 限流的定义固定窗口算法滑动窗口算法漏桶算法(推荐)令牌桶算法(推荐)限流粒度本地限流(单机限流)分布式限流(多机限流)分布式限流的实现 限流的定义 限流,也称流量控制。是指系统…...
图文教程:使用PowerDesigner导出数据库表结构为Word/Html文档
1、第一种情况-无数据库表,但有数据模型 1.1 使用PowerDesigner已完成数据建模 您已经使用PowerDesigner完成数据库建模,如下图: 1.2 Report配置和导出 1、点击:Report->Reports,如下图: 2、点击&…...
7-7 旅行售货员
目录 题目描述 输入格式: 输出格式: 输入样例: 输出样例: 解题思路: 详细代码: 题目描述 某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路…...
QT写的动态正弦曲线图显示并打印
创建一个显示正弦曲线的 QChartView,并通过定时器不断更新图表数据,模拟动态数据。此外,还包含了一个在特定时间自动将图表导出为 PDF 文件的功能。 代码分析和注释 #include <QApplication> #include <QMainWindow> #include &…...
AI开发:决策树模型概述与实现:从训练到评估和可视化 - Python
通过前面的一些练习,我们已经学习了支持向量机、 回归、 鸢尾花模型 、卷积、 知识图谱、 生成式对抗网络、 K近邻、 等AI算法的基本概念,熟悉了一些常用的AI库,并且使用PYTHON大法进行了一些实战练习。接下来,我们向更深一层的概…...
MySQL 性能瓶颈,为什么 MySQL 表的数据量不能太大?
MySQL的性能瓶颈(为什么MySQL有几万的qps,怎么来的?性能分析 为什么 MySQL 表不能太大网上大部分人的说法:问题的关键: B树层数对查询性能的影响到底有多大? 是什么导致的 MySQL 查询缓慢?如何解决: MySQL的性能瓶颈(为什么MySQL有几万的qps,怎么来的? 一个全表扫描的查询…...
Vue中接入萤石等直播视频(更新中ing)
一、萤石: 1. 萤石云开发文档: https://open.ys7.com/help/31 2、安装: npm install ezuikit-js --save 3、在文件中引用:import EZUIKit from ezuikit-js 4、具体代码: 获取accessToken:https://open.…...
25 go语言(golang) - 内存分配机制原理
Go 语言的内存分配机制是一个复杂且高效的系统,旨在为程序提供快速和安全的内存管理。理解 Go 的内存分配有助于编写更高效的代码,并优化程序性能。 一、内存区域 栈(Stack) 栈用于函数调用时的临时变量分配。栈上的内存在函数返…...
【Linux命令】ps -a 和 ps -ef 的区别
ps -a 和 ps -ef 是 ps(process status)命令的不同选项,它们用于显示不同的进程信息。以下是这两个选项的主要区别: ps -a -a 选项表示显示所有拥有终端的进程,但不包括守护进程(daemon processes&#x…...
几个支持用户名密码的代理链工具: glider, gost, proxychains+microsocks
几个支持用户名密码的代理链工具: glider, gost, proxychainsmicrosocks gost -L:7777 -Fsocks5://192.168.2.20:7575 -Fsocks5://user:passwd1.1.1.1:10086 -Dgost:(https://github.com/ginuerzh/gost) 参考 https://www.quakemachinex.com/blog/279.html...
编译安装教程
编译教程 下面是一个完整的从源码编译安装软件的教程,涵盖了从环境准备到配置、编译、安装的所有可能会用到的步骤和细节,适用于各种类型的软件包。 一、环境准备 在开始编译源码之前,确保系统满足以下条件: 1. 安装必要工具 …...
计算机网络-物理层
1.1传输媒体: 导引型传输媒体:双绞线,同轴电缆,光纤 非导引型传输媒体:微波通信(2~40GHz) 1.2传输方式: 串行传输:一个接一个的依次传输 并行传输:一次发送n…...
缓存管理自动化:JuiceFS 企业版 Cache Group Operator 新特性发布
近期,JuiceFS 企业版推出了 Cache Group Operator,用于自动化创建和管理缓存组集群。Operator 是一种简化 Kubernetes 应用管理的工具,它能够自动化应用程序的生命周期管理任务,使部署、扩展和运维更加高效。 在推出 Operator 之前…...
Linux应用软件编程-多任务处理(线程)
线程:轻量级的进程,线程的栈区独立(8M),与同一进程中的其他线程共用进程的堆区,数据区,文本区。 进程是操作系统资源分配的最小单位;线程是cpu任务调度的最小单位。 1. 线程的创建…...
MySql索引(基础篇)
后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都会及时修改的! 感谢各位大佬写的文章让我学到很多东西!只是在各位大佬的基础加了我自己的思路&a…...
手机发烫怎么解决?
在当今这个智能手机不离手的时代,手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感,长期过热还可能损害手机硬件、缩短电池寿命,甚至引发安全隐患。不过别担心,下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…...
Java实现观察者模式
一、前言 观察者模式,又称为发布订阅模式,是一种行为设置模式,允许对象之间建立一对多的依赖关系,这样当一个对象状态改变时,它的所有依赖者(观察者)都会收到通知并自动更新。 二、具体实现 …...
OpenResty开发环境搭建
简介 OpenResty 是一个基于 Nginx的高性能 Web 平台,用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。官方地址:http://openresty.org/cn/ 具备下列特点: 具备Nginx的完整功能基于Lua语言进行扩展&#…...
鸿蒙系统文件管理基础服务的设计背景和设计目标
有一定经验的开发者通常对文件管理相关的api应用或者底层逻辑都比较熟悉,但是关于文件管理服务的设计背景和设计目标可能了解得不那么清楚,本文旨在分享文件管理服务的设计背景及目标,方便广大开发者更好地理解鸿蒙系统文件管理服务。 1 鸿蒙…...
Elasticsearch-脚本查询
脚本查询 概念 Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能,ES支持多种脚本语言,如painless,其语法类似于Java,也有注释、关键字、类型、变量、函数等,其就要相对于其他脚本高出几倍的性…...
【蓝桥杯——物联网设计与开发】拓展模块4 - 脉冲模块
目录 一、脉冲模块 (1)资源介绍 🔅原理图 🔅采集原理 (2)STM32CubeMX 软件配置 (3)代码编写 (4)实验现象 二、脉冲模块接口函数封装 三、踩坑日记 &a…...
devops和ICCID简介
Devops DevOps(Development 和 Operations 的组合)是一种软件开发和 IT 运维的哲学,旨在促进开发、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它强调自动化流程,持续集成(CI…...
uniapp使用live-pusher实现模拟人脸识别效果
需求: 1、前端实现模拟用户人脸识别,识别成功后抓取视频流或认证的一张静态图给服务端。 2、服务端调用第三方活体认证接口,验证前端传递的人脸是否存在,把认证结果反馈给前端。 3、前端根据服务端返回的状态,显示在…...
OSI 网络 7 层模型
问: 请你介绍一下OSI七层网络模型物理层解决什么问题?功能原理问题 数据链路层解决什么问题功能原理 网络层解决的问题功能原理 传输层解决什么问题功能原理会话层解决什么问题功能原理: 表示层解决什么问题 应用层解决什么问题如何展示? 问: 请你介绍一下OSI七层网络模型 物…...
RK356x bsp 7 - PCF8563 RTC调试记录
文章目录 1、环境介绍2、目标3、PCF85634、dts配置5、内核配置6、测试验证 1、环境介绍 硬件:飞凌ok3568-c开发板 软件:原厂rk356x sdk 2、目标 开发板断电后仍正常计时。 3、PCF8563 PCF8563 是由 NXP Semiconductors 公司生产的低功耗 CMOS 实时…...
Vue.js组件开发-如何实现vueFLow流程
在Vue.js组件中实现vueFlow流程实例 确保已经安装了vueFlow库。如果还没有安装,可以使用npm或yarn进行安装: npm install braks/vue-flow # 或者 yarn add braks/vue-flow步骤: 引入vueFlow组件: 在Vue组件文件中ÿ…...
upload-labs关卡记录15
图片马,这里就可以看到任务和注意事项: 使用一个正常图片,然后拼接一个一句话木马即可实现。这里就用命令窗口进行实现: copy 111.png/b shell.php/a shell.png 注意这里的命令窗口要在存在图片和一句话木马的目录下打开&#…...
面试题总结
一、mysql中的乐观锁、悲观锁、共享锁、排它锁、行锁、表锁 1、乐观锁 通过sql实现的,更新sql语句时加上where version #{version}乐观锁不是数据库自带的锁,需要我们自己去实现。乐观锁是指操作数据库时(更新操作),想法很乐观,认…...