面试题整理2---Nginx 性能优化全方案

面试题整理2---Nginx 性能优化全方案

  • 1. 调整工作进程数和线程数
    • 1.1 调整工作进程数
    • 1.2 调整进程的最大连接数
  • 2. 配置Gzip压缩
    • 2.2 配置Gzip压缩
  • 3. 配置缓存策略
    • 3.1 配置浏览器缓存时间
    • 3.2 配置代理服务器缓存时间
  • 4. 优化文件访问方式
    • 4.1 使用sendfile()函数发送文件数据
    • 4.2 启用sendfile_max_chunk和tcp_nopush参数
  • 5. 优化日志配置
    • 5.1 调整日志级别
    • 5.2 配置日志切割和压缩
  • 6. 针对 Nginx 的系统内核参数调优
    • 6.1 增加内核参数调优内容
    • 6.2 文件句柄数量限制
  • 7. 其他优化建议
    • 7.1 使用CDN加速静态资源访问
    • 7.2 使用HTTP/2协议提高传输效率

Nginx是一款高性能的Web服务器,广泛应用于互联网领域。然而在高并发、大流量的情况下,Nginx的性能可能会受到一定的影响。因此,对Nginx进行性能优化是非常必要的。

1. 调整工作进程数和线程数

Nginx采用异步非阻塞的方式处理请求,这种方式可以充分利用CPU资源,提高并发处理能力。但是,过多的工作进程和线程会导致系统资源浪费,降低性能。因此,需要根据实际情况调整Nginx的工作进程数和线程数。

1.1 调整工作进程数

在描述调整工作进程数时,可以提到如何根据 CPU 核心数来调整。通常情况下,worker_processes 的设置推荐为 CPU 核心数,或者是根据机器的负载情况适当调整。

例如,常见的做法是设置为系统的 CPU 核心数:

worker_processes auto; # 自动根据 CPU 核心数调整

1.2 调整进程的最大连接数

worker_connections 是每个工作进程可以同时处理的连接数。如果服务器负载较高,可以适当增大这个值,典型值为 10242048

例如:

worker_connections 1024; # 每个进程的最大连接数

表示将每个工作进程的线程数设置为1024。

需要注意的是,线程数并不是越大越好,因为线程之间的竞争可能会导致性能下降。因此,需要根据实际情况进行调整。

2. 配置Gzip压缩

2.2 配置Gzip压缩

在Nginx配置文件中添加以下内容:

http {...gzip on; # 开启Gzip压缩功能gzip_vary on;  # 启用gzip内容编码变化gzip_min_length 1k; # 设置最小压缩文件大小为1KBgzip_buffers 4 16k; # 设置压缩缓冲区个数和大小gzip_http_version 1.1; # 设置支持的HTTP协议版本为1.1gzip_comp_level 2; # 设置压缩级别为2(速度与压缩率的平衡)gzip_types text/plain application/x-javascript text/css application/xml application/javascript image/svg+xml; # 设置需要压缩的文件类型...
}

3. 配置缓存策略

缓存是提高网站性能的重要手段之一。Nginx提供了多种缓存策略,可以根据实际需求进行配置。以下是一些常见的缓存策略:

3.1 配置浏览器缓存时间

配置浏览器缓存时间的示例没有问题。需要注意的是,对于不同类型的文件,可以设置不同的缓存时间。

例如,图片可以设置较长的缓存时间,而 HTML 文件则可以设置较短的缓存时间:

location ~* \.(jpg|jpeg|gif|png|svg)$ {add_header Cache-Control "public, max-age=31536000, immutable"; # 图片缓存1年,且不变动
}location ~* \.(html|htm)$ {add_header Cache-Control "no-cache, must-revalidate"; # HTML文件不缓存
}

3.2 配置代理服务器缓存时间

对于代理缓存,您可以考虑增加一些更灵活的缓存策略,如缓存条件或不同状态码的缓存策略.

例如:

location / {proxy_pass http://backend; # 将请求转发到后端服务器proxy_cache mycache; # 启用缓存,命名为mycacheproxy_cache_valid 200 302 10m;  # 正常和重定向响应缓存10分钟proxy_cache_valid 404 1m;       # 404错误响应缓存1分钟proxy_cache_valid 500 502 503 504 1m;  # 错误响应缓存1分钟
}

4. 优化文件访问方式

在处理静态文件时,Nginx默认会将文件读取到内存中进行处理。这种方式在大文件或高并发情况下会导致内存消耗过大,影响性能。因此,可以采用优化文件访问方式来提高性能。以下是一些优化方法:

4.1 使用sendfile()函数发送文件数据

sendfile_max_chunk 用于控制每次 sendfile() 发送的最大数据块大小,通常对于大文件下载,适当增大这个值可以提高性能。而 tcp_nopush 启用 TCP_CORK 功能,可以优化 TCP 数据包的发送,提高传输效率。

http {...sendfile on; # 开启sendfile()函数支持功能(需要操作系统支持)...
}

4.2 启用sendfile_max_chunk和tcp_nopush参数

通过设置sendfile_max_chunktcp_nopush参数,可以控制Nginx在发送文件时的最大分片大小和TCP_CORK选项。

例如:

http {...sendfile_max_chunk 1m; # 设置最大分片大小为1MBtcp_nopush on; # 开启TCP_CORK选项...
}

5. 优化日志配置

日志是排查问题的重要手段,但是过多的日志会导致磁盘空间不足,影响系统性能。因此,需要对Nginx的日志进行优化。以下是一些优化方法:

5.1 调整日志级别

Nginx支持多种日志级别,如debuginfonoticewarnerror等。可以通过修改Nginx配置文件中的log_level参数来调整日志级别。

例如:

http {...error_log /var/log/nginx/error.log warn;  # 错误日志access_log /var/log/nginx/access.log combined;  # 访问日志...
}

5.2 配置日志切割和压缩

日志切割和压缩的设置是正确的。如果日志文件过大,您还可以考虑使用日志轮转(logrotate)来定期压缩和删除旧的日志文件。

http {...access_log /var/log/nginx/access.log combined buffer=32k flush=1m; # 配置访问日志切割和压缩功能error_log /var/log/nginx/error.log warn buffer=32k flush=1m; # 配置错误日志,并设置日志级别为warn...
}

6. 针对 Nginx 的系统内核参数调优

6.1 增加内核参数调优内容

针对高并发场景,需对系统内核参数进行优化,主要包括文件句柄限制、TCP 参数调整等:

内核参数优化示例: 在 /etc/sysctl.conf 中增加以下内容:

# 增加文件句柄数量
fs.file-max = 2097152# 调整网络参数以提高并发性能
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_keepalive_time = 300

生效命令:

sysctl -p

6.2 文件句柄数量限制

Nginx 需要足够的文件句柄来处理高并发连接,需调整 ulimit 参数:

/etc/security/limits.conf 中增加:

* soft nofile 65535
* hard nofile 65535

7. 其他优化建议

除了上述优化方法外,还有一些其他的优化建议:

7.1 使用CDN加速静态资源访问

CDN(Content Delivery Network)是一种内容分发网络

  • 可以将静态资源缓存到离用户更近的节点上,提高访问速度。
  • 可以使用阿里云、腾讯云等云服务商提供的CDN服务。

7.2 使用HTTP/2协议提高传输效率

HTTP/2协议是一种新的HTTP协议,支持多路复用、头部压缩等功能,可以提高传输效率。需要在Nginx和客户端同时支持HTTP/2协议才能生效。可以通过修改Nginx配置文件中的listen指令来启用HTTP/2协议。例如:

server {listen 443 ssl http2; # 启用HTTPS并启用HTTP/2协议支持功能(需要操作系统和SSL库支持)...}

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

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

相关文章

10. 虚拟机VMware Workstation Pro下共享Ubuntu和Win11文件夹

本文记录当前最新版虚拟机VMware Workstation Pro(2024.12)如何在win11下共享文件,以实现Windows与Ubuntu互传文件的目的。 1. 创建共享文件夹 1.1 先关闭虚拟机的客户机,打开虚拟机设置 1.2 在虚拟机设置界面找到“选项”->“…

Halcon单相机+机器人=眼在手上#标定心得

首先,这个标定板肯定是放在我们要作业的工作台上的 目的 **1,得到标定物(工作台)与机器人底座之间的pose转换关系。2,得到相机与机器人末端tool的的转换关系。 两个不确定的定量 1,标定板与机器人底座b…

HTTP—03

触发 GET 请求 1)直接在浏览器 地址栏 输入 URL,此时构成了一个GET请求 2)HTML中的一些特殊标签可能会触发 例如 img,a,link,script... 3)通过Form表单触发(Form本质也是一个HTML标签) 4&#xff0…

【Jenkins】pipeline 的基础语法以及快速构建一个 jenkinsfile

Jenkins Pipeline 是 Jenkins 中的一个强大功能,可以帮助你实现自动化构建、测试、部署等流程。Jenkins Pipeline 使用一种名为 Pipeline DSL(Domain Specific Language)的脚本语言,通常以 Jenkinsfile 形式存在,用于定…

2024年《网络安全事件应急指南》

在这个信息技术日新月异的时代,网络攻击手段的复杂性与日俱增,安全威胁层出不穷,给企事业单位的安全防护能力带 来了前所未有的挑战。深信服安全应急响应中心(以下简称“应急响应中心”)编写了《网络安全事件应急指南》…

MobaXterm 连接不上VMware 的Ubuntu 虚拟机

想在window11的笔记本上通过VMWare安装Ubuntu操作系统,但是在两个桌面见来回切换,十分的麻烦,于是通过远程服务访问客户端软件MateXterm来访问虚拟机的Linux系统,但是从CSDN上搜到的教程都没有成功,于是,尝…

MapReduce的shuffle过程详解

文章目录 MapReduce的shuffle过程详解一、引言二、Shuffle过程详解1、Map端Shuffle1.1、分区(Partition)1.2、排序(Sort)1.3、分割(Spill) 2、Reduce端Shuffle 三、使用示例四、总结 MapReduce的shuffle过程…

AI图像生成利器:Stable Diffusion 3.5本地运行与远程出图操作流程

文章目录 前言1. 本地部署ComfyUI2. 下载 Stable Diffusion3.5 模型3. 演示文生图4. 公网使用Stable Diffusion 3.5 大模型4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 本篇文章将介绍如何在Windows系统电脑本地部署Stable Diffusion 3.5,并利用cpolar…

第N7周:调用Gensim库训练Word2Vec模型

文章目录 一、准备工作1.安装Gensim库2.对原始语料分词 二、训练Word2Vec模型三、模型应用1.计算词汇相似度2.找出不匹配的词汇3.计算词汇的词频 四、总结 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、…

【容器】k8s学习笔记原理详解(十万字超详细)

Pod详解 Pod介绍 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个: 可以以它为依据&am…

​ 阅读英文文献时,有哪些提高理解效率的方法?

当我们拿起一篇文献开始阅读时,就像是打开了一扇通往未知世界的大门。但别急着一头扎进去,咱们得像个侦探一样,带着疑问去探险。毕竟,知识的海洋深不可测,不带点“装备”怎么行?今天就聊聊,平时…

PC寄存器(Program Counter Register) jvm

在JVM(Java虚拟机)中,PC寄存器(Program Counter Register)扮演着至关重要的角色,它是JVM执行引擎的核心组成部分之一。以下是PC寄存器在JVM中的具体角色和职责: 指令执行指针: PC寄存…

OpenAI 2024:技术创新总结与展望

亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…

WSL Ubuntu

文章目录 1. 概述1.1 什么是适用于 Linux 的 Windows 子系统1.2 什么是 WSL 21.3 WSL 2 中的新增功能1.4 比较 WSL 2 和 WSL 1 2. 参考资料3. 修改存储位置4. 网络访问 1. 概述 1.1 什么是适用于 Linux 的 Windows 子系统 适用于 Linux 的 Windows 子系统可让开发人员按原样运…

矩阵:Input-Output Interpretation of Matrices (中英双语)

矩阵的输入-输出解释:深入理解与应用 在线性代数中,矩阵与向量的乘积 ( y A x y Ax yAx ) 是一个极为重要的关系。通过这一公式,我们可以将矩阵 ( A A A ) 看作一个将输入向量 ( x x x ) 映射到输出向量 ( y y y ) 的线性变换。在这种…

网络安全概论——入侵检测系统IDS

一、入侵检测的概念 1、入侵检测的概念 检测对计算机系统的非授权访问对系统的运行状态进行监视,发现各种攻击企图、攻击行为或攻击结果,以保证系统资源的保密性、完整性和可用性识别针对计算机系统和网络系统或广义上的信息系统的非法攻击&#xff0c…

登山第十六梯:深度恢复——解决机器人近视问题

文章目录 一 摘要 二 资源 三 内容 一 摘要 深度感知是基于 3D 视觉的机器人技术的一个重要问题。然而,现实世界的主动立体或 ToF 深度相机经常会产生嘈杂且深度不完整,从而成为机器人性能的瓶颈。在这项工作中,提出了 一个基于学习的立体…

《全面解析 QT 各版本:特性、应用与选择策略》

《全面解析 QT 各版本:特性、应用与选择策略》 一、QT 简介与发展历程二、QT 4 版本:经典之作(一)稳定耐用的 4.8.7(二)4.x 系列的终结与遗产 三、QT 5 版本:广泛应用的系列(一&…

【NLP】序列到序列(seq2seq)建模工具fairseq使用详解

文章目录 一、fairseq简介二、安装方式2.1 pip安装2.2 源码安装 三、fairseq命令工具3.1 fairseq-preprocess3.2 fairseq-train3.3 fairseq-generate3.4 fairseq-interactivate3.5 fairseq-score3.6 fairseq-eval-lm 4. 常见报错报错1 参考资料 一、fairseq简介 fairseq 是 Fa…

108. 将有序数组转换为二叉搜索树(java)

题目描述: 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 示例 1: 输入:nums [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,…