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参数值的大小和请求转发比率成正比,该配置一般用于后端应用程序服务器硬件配置差异大而导致承受的访问压力不一样的情况按照指定权重比转发请求
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的性能监控

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.mzph.cn/bicheng/65615.shtml

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

相关文章

vue2使用pdfjs-dist和jsPDF生成pdf文件

vue2使用pdfjs-dist和jsPDF生成pdf文件 1、安装依赖 npm install pdfjs-dist2.6.3472、引入依赖 import { jsPDF } from jspdf// 使用require方式导入pdfjs-dist v2.6.347,高版本报错(import导入会报错:GlobalWorkerOptions undefined&…

sklearn_pandas.DataFrameMapper的用法

文章目录 介绍主要作用基本用法示例对不同列应用不同的转换器对多列应用相同的转换器输出为 Pandas DataFrame 注意事项转换器的适用性:输出格式:与 scikit-learn 的兼容性: 介绍 DataFrameMapper 是 sklearn-pandas 库中的一个工具&#xf…

HTML——31.定义媒介资源

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>定义媒介资源</title></head><body><!--source标签用来为<video>视频和<audio>音频 &#xff0c;定义媒介资源--><!--src属性&…

宝塔-firefox(Docker应用)-构建自己的Web浏览器

安装基础软件 宝塔中安装firefox(Docker应用) 。宝塔中需要先安装docker及docker-composefirefox配置安装 点击firefox应用&#xff0c;选择【安装配置】点击右边绿色按钮&#xff0c;进行安装&#xff0c;这一步等待docker-compose根据你的配置初始化docker应用 等待安装 …

ArcGIS土地利用数据制备、分析及基于FLUS模型土地利用预测(数据采集、处理、分析、制图)

FLUS&#xff08;Flexible Land Use Simulation&#xff09;模型是一个用于模拟土地利用变化的模型&#xff0c;它结合了经济理论、土地利用和土地覆盖变化的动态过程。FLUS模型由美国农业部农业经济研究服务局&#xff08;ERS&#xff09;开发&#xff0c;旨在提供对美国及全球…

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(一)

****非斜体正文为原文献内容&#xff08;也包含笔者的补充&#xff09;&#xff0c;灰色块中是对文章细节的进一步详细解释&#xff01; 三、传统微调范式&#xff08;Traditional Fine-Tuning Paradigm&#xff09; 在这个范式中&#xff0c;首先在大量未标记的文本数据上预…

【泰克生物】从酵母细胞表面展示到抗体筛选:实现精准药物发现

在现代药物发现领域&#xff0c;精准筛选和优化抗体已成为一种必不可少的技术手段。传统的抗体筛选方法依赖于动物免疫或体外筛选&#xff0c;这些方法往往成本高且周期长。近年来&#xff0c;酵母细胞表面展示技术&#xff08;Yeast Surface Display, YSD&#xff09;成为一种…

C++ 设计模式:门面模式(Facade Pattern)

链接&#xff1a;C 设计模式 链接&#xff1a;C 设计模式 - 代理模式 链接&#xff1a;C 设计模式 - 中介者 链接&#xff1a;C 设计模式 - 适配器 门面模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为子系统中的一组接口提供一个一致&#…

基于YOLOV5+Flask安全帽RTSP视频流实时目标检测

1、背景 在现代工业和建筑行业中&#xff0c;安全始终是首要考虑的因素之一。特别是在施工现场&#xff0c;工人佩戴安全帽是确保人身安全的基本要求。然而&#xff0c;人工监督难免会有疏漏&#xff0c;尤其是在大型工地或复杂环境中&#xff0c;确保每个人都佩戴安全帽变得非…

【每日学点鸿蒙知识】深色模式、Webview查看版本、window设置亮度、List缓存节点更新、预编译JS

1、HarmonyOS 深色模式下canvas绘制通过resourcemanager.getColor不是实际dark模式下的颜色&#xff1f; 深色模式下canvas绘制通过resourcemanager.getColor不是实际dark模式下的颜色 正确获取到资源resourcemanager. getColorSync($r(‘app.color.test_color’).id);深色模…

Day08:字符串

1. 什么是字符串 字符串&#xff08;String&#xff09; 是由一系列字符组成的文本数据。在Python中&#xff0c;字符串用引号括起来&#xff0c;既可以是单引号&#xff0c;也可以是双引号"。 字符串可以包含字母、数字、空格、符号等内容。 示例&#xff1a;定义字符串…

Unity开发微信小游戏踩坑总结

前言 不记录真记不住&#xff0c;这个帖子以后不定时更新。 问题1&#xff1a;图片模糊 问题描述&#xff1a; 在Unity里什么事没有&#xff0c;进入到微信开发者工具里就已经模糊了&#xff0c;人物动画是一团马赛克&#xff0c;图片看着倒是没事。 问题原因&#xff1a;…

Vue异步处理、异步请求

Vue.js 是一个用于构建用户界面的渐进式JavaScript框架&#xff0c;它允许开发者以声明式的方式编写异步操作。在 Vue 中处理异步任务非常重要&#xff0c;因为很多现代Web应用都需要与后端API交互、执行耗时计算或管理复杂的异步流程。以下是对 Vue 中异步处理的详细讲解&…

【AI日记】24.12.30 kaggle 比赛 2-18

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Regression with an Insurance Dataset时间&#xff1a;8 小时 读书 1 书名&#xff1a;教育的本质时间&#xff1a;0.5 小时评估&#xff1a;快速读完&#xff0c;收获不…

torchvision.utils.make_grid 解释下

torchvision.utils.make_grid 是 PyTorch 中 torchvision 库提供的一个实用函数,用于将多个图像拼接成一个网格,方便进行可视化。 主要功能 make_grid 将一批图片组织成一个网格形式,输出一个单一的张量,便于使用可视化工具(如 Matplotlib)查看图像。 参数解释 torchvi…

VUE echarts 教程二 折线堆叠图

VUE echarts 教程一 折线图 import * as echarts from echarts;var chartDom document.getElementById(main); var myChart echarts.init(chartDom); var option {title: {text: Stacked Line},tooltip: {trigger: axis},legend: {data: [Email, Union Ads, Video Ads, Dir…

微信小程序中遇到过的问题

记录微信小程序中遇到的问题&#xff08;持续更新ing&#xff09; 问题描述&#xff1a;1. WXML中无法直接调用JavaScript方法。2. css中无法直接引用背景图片。3. 关于右上角胶囊按钮。4. 数据绑定问题。5. 事件处理问题。6. 关于movable-view组件的问题7. 关于设置宽度后设置…

RabbitMQ实现生产者消费者

一.启动MQ 注意管理员身份进入cmd才行,我这里是在本地安装的MQ,推荐使用虚拟机安装 二.思路 官方解释RabbitMQ结构: 自我理解RabbitMQ结构: 其实RabbitMQ的服务器就像邮局一样,我们的生产者和消费者对于这个服务器来说都是消费者,因为服务器都可以向两者发送消息 环境准备 …

课设CLion连接Ubuntu14makeQt项目出错解决汇总

在这之前需要注意以下几点&#xff1a; 1、需要 确保CLion能连接Ubuntu14 2、cmakelist.txt文件配置 3、知道部署路径&#xff1a; 问题一&#xff1a;/usr/bin/ld: cannot open output file GreedySnake: Is a directory 否则就会出现make以后应该生成一个可执行文件&…

MySQL三大日志—— binlog、redoLog、undoLog 详解

前言&#xff1a; 日志是mysql数据库的重要组成部分&#xff0c;记录着数据库运行期间各种状态信息&#xff0c;能帮助我们进行很多容错及分析工作&#xff0c;其中有三大日志与我们这些开发者息息相关&#xff0c;本文将介绍binlog、redoLog、undoLog三种日志&#xff1a; 1.…