Nginx的性能分析与调优简介

news/2024/12/28 5:22:50/

Nginx的性能分析与调优简介

    • 一、Nginx的用途
    • 二、Nginx负载均衡策略介绍与调优
    • 三、其他调优方式简介
    • 四、Nginx的性能监控

Nginx_1">一、Nginx的用途

Nginx是一种高性能的HTTP和反向代理服务器,最初作为HTTP服务器开发,主要用于服务静态内容如HTML文件、图像、视频等。与传统的Apache相比,Nginx在处理静态文件时表现出色,因为它采用了事件驱动的架构,能够处理大量的并发连接而不会消耗过多的资源。此外,Nginx还可以作为反向代理服务器,接收客户端请求并将其转发到后端服务器处理,从而提高系统的可用性和性能。‌

Nginx还具备强大的负载均衡功能,可以将客户端请求分发到多个后端服务器,支持多种负载均衡算法,如轮询、最少连接和IP哈希等,从而实现高可用性和扩展性。作为缓存服务器,Nginx可以缓存静态内容和动态生成的页面,减少对后端服务器的请求数量,提高网站的响应速度。

Nginx也属于一种Web中间件1Nginx不管是在作为Web静态资源访问管理,或者作为动态的请求代理,性能都是非常高效的。当然Nginx有时候也会存在性能瓶颈,需要进行性能分析和调优以支持更高的并发处理能力。

Nginx_12">二、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参数值的大小和请求转发比率成正比,该配置一般用于后端应用程序服务器硬件配置差异大而导致承受的访问压力不一样的情况按照指定权重比转发请求
3ip_hash通过在upstream配置ip_hash参数每个请求按原始访问ip的hash结果来进行请求转发,由于同一个ip的hash值肯定是不变的,这样每个固定客户端就会只访问一个后端应用程序服务器,该配置一般可解决多个应用程序服务器的session复制和同步的问题,因为同一个ip的请求都转发到了同一台服务器的应用程序上了,所以也就不会有session不同步的问题了。但是这可能会导致后端应用服务器的负载不均的情况,因为在这种策略下后端应用服务器收到的请求数肯定很难一样多按照ip_hash转发请求主要解决session不同步问题
4least_conn通过在upstream配置中增加least_conn配置Nginx在接收到请求后会把请求转发给连接数较少的后端应用程序服务器请求优先转发给连接数较少的服务器
5fairfair属于第三方策略,即不是Nginx本身自带的策略,需要安装对应的第三方插件fair是按照服务器端的响应时间来分配请求给后端应用程序服务器,响应时间短的优先分配响应时间短的优先分配
6url_hashurl_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参数
5FastCGI配置调优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_55">四、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~~又是学到东西的一天!
给自己点个赞!!!
在这里插入图片描述


  1. Web中间件一般主要负责静态资源(也可以称作静态请求)的处理和动态请求的转发,而动态请求一般都是由应用中间件来进行处理的。 ↩︎


http://www.ppmy.cn/news/1558703.html

相关文章

Vue零基础教程|从前端框架到GIS开发系列课程(七)响应式系统介绍

前文指路:《Vue零基础教程》,从前端框架到GIS开发系列课程 Vue零基础教程|从前端框架到GIS开发系列课程(二) Vue零基础教程|从前端框架到GIS开发系列课程(三)模板语法 Vue零基础教程|从前端框架到GIS开发…

【test】git clone lfs问题记录

Git Large File Storage (LFS) 是 Git 的一个扩展,它替代 Git 来管理大型文件,比如音频、视频、图形文件和其他二进制大对象(blobs)。Git LFS 通过将这些大文件的指针存储在本地仓库中,并把实际文件存储在一个单独的服…

力扣面试题 - 40 迷路的机器人 C语言解法

题目: 设想有个机器人坐在一个网格的左上角,网格 r 行 c 列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。 网格中的障碍物和空…

龙智出席2024零跑智能汽车技术论坛,分享功能安全、需求管理、版本管理、代码扫描等DevSecOps落地实践

龙智快讯 2024年12月5日,由零跑和盖世汽车主办的“2024零跑智能汽车技术论坛”在杭州零跑总部圆满落幕。此次技术论坛聚焦AI语言大模型、AUTOSAR AP平台、DevOps、端到端自动驾驶等热点话题展开探讨,旨在推动智能汽车技术的创新与发展。 龙智作为国内领先…

Android Studio | 连接手机设备后,启动App时出现:Waiting For DebuggerApplication (App名)...

在这种情况下,打开目录文件,出现 Is:/storage/emulated/: Permission denied 问题分析: 以上两种情况表明应用程序试图访问Android设备的存储空间中的/storage/emulated/目录,但是没有足够的权限去执行这个操作。 解决办法&…

目前最流行的 Rust Web 框架有哪些?

目前最流行的 Rust Web 框架有哪些? 1. Actix Web:高性能之王,老牌框架 特点: 高性能:基于 Actor 模型,是目前 Rust 生态中最成熟、性能最强的 Web 框架之一。功能强大:支持 HTTP/1.x、HTTP/2、WebSocket 等,内置中间件和多种插件。社区支持广泛:拥有大量使用者,资料…

Redis——缓存穿透

文章目录 1. 问题介绍1.1 定义1.2 举例 2. 解决方案2.1 方案一:空值缓存2.1.1 做法2.1.2 举例2.1.3 示例代码2.1.4 优点2.1.5 缺点 2.2 方案二:布隆过滤器2.2.1 思想2.2.2 做法2.2.3 示例代码2.2.4 优点2.2.5 缺点 2.3 方案三:限流 3. 总结 1…

【python 逆向分析某有道翻译】分析有道翻译公开的密文内容,webpack类型,全程扣代码,最后实现接口调用翻译,仅供学习参考

文章日期:2024.12.24 使用工具:Python,Node.js 逆向类型:webpack类型 本章知识:sign模拟生成,密文的解密(webpack),全程扣代码,仅供学习参考 文章难度:低等(没…