nginx性能调优与深度监控

目录

nginx性能调优

更改进程数与连接数

进程数

连接数

静态缓存功能设置

日志切割

配置网页压缩

nginx 的深度监控

GoAccess 简介

GoAccess安装

​编辑

配置中文环境

GOAccess生成中文报告

测试访问

nginx vts 简介

nginx vts 安装

nginx配置开启vts

测试访问


::

nginx性能调优

更改进程数与连接数

进程数

在高并发环境中,需要启动更多的 Nginx 进程以保证快速响应,用以处理用户的请求,避免造成阻塞。使用 ps aux 命令查看 Nginx 运行进程的个数。从命令执行结果可以看出 master process 是 Nginx 的主进程,开启 1 个;worker process 是子进程,子进程也是开启了 1 个。修改 Nginx 的配置文件的 worker_processes 参数,一般设为 CPU 的个数或者核数,在高并发的情况下可设置为 CPU 个数或者核数的 2 倍,可以查看 CPU 的核数以确定参数

参数设置为 4,和 CPU 的核数相同。运行进程数多一些,响应客户端访问请求时,Nginx 就不会临时启动新的进程提供服务,减少了系统的开销,提升了服务速度。

修改完后,重启服务,使用 ps aux 查看运行进程数的变化情况。从下面执行结果中可以看出开启了 1 个主进程和 4 个子进程,参数设置起到了作用。

默认情况下,Nginx 的多个进程可能更多的跑在一颗 CPU 上。为了充分利用硬件多核多 CPU,可以分配不同的进程给不同的 CPU 处理。在一台 4 核 CPU 服务器上,可以设置每个进程分别由不同的 CPU 核心处理,达到 CPU 的性能最大化。

连接数

单个Worker进程最大并发连接数

所以 nginx 的总并发数计算: 总并发数 = worker_processes × worker_connections

静态缓存功能设置

当 Nginx 将网页数据返回给客户端后,可设置缓存时间,以便在日后进行相同内容的请求时直接返回,以避免重复请求,加快访问速度。缓存时间一般针对静态资源进行设置,对动态网页不用设置缓存时间。
设置静态资源缓存

然后重新加载或重启服务。

验证静态缓存

通过浏览器查看,响应头中包含字段即为缓存成功置连接超时

在企业网站中,为了避免同一个客户长时间占用连接,造成资源浪费,可设置相应的连接超时参数,实现控制连接访问时间。可以修改配置文件 nginx.conf,设置 keepalive_timeout 超时时间。

默认是60秒/设置超时是180秒/

keepalive_timeout

第一个参数指定了与客户端的 keep - alive 连接超时时间,服务器将会在这个时间后关闭连接。
可选的第二个参数指定了在响应头 Keep - Alive: timeout=time 中的 time 值。
这个头能够让一些浏览器主动关闭连接,这样服务器就不必去关闭连接了。没有这个参数,Nginx 不会发送 Keep - Alive 响应头。

日志切割

随着 Nginx 运行时间的增加,产生的日志也会逐渐增加,为了方便掌握 Nginx 的运行状态,需要时刻关注 Nginx 日志文件。太大的日志文件对监控是一个大灾难,不便于分析排查,需要定期的进行日志文件的切割。
Nginx 没有类似 Apache 的 cronlog 日志分割处理功能,但是可以通过 Nginx 的信号控制功能脚本来实现日志的自动切割,并将脚本加入到 Linux 的计划任务中,让脚本在每天的固定时间执行,便可实现日志切割功能。下面是具体操作步骤。

编写脚本

/opt/fenge.sh,把 Nginx 的日志文件 /usr/local/nginx/logs/access.log 移动到目录 /var/log/nginx 下面,以当前时间做为日志文件的名称,然后用 kill - USR1 创建新的日志文件 /usr/local/nginx/logs/access.log,最后删除 30 天之前的日志文件。

执行/root/fenge.sh,测试日志文件是否被切割

设置ceontab任务,定期执行脚本自动进行日志分割。

即每天的凌晨 1:30 分执行 /opt/fenge.sh 脚本,进行日志分割。

配置网页压缩

Nginx 的 ngx_http_gzip_module 压缩模块提供了对文件内容压缩的功能,允许 Nginx 服务器将输出内容发送到客户端之前进行压缩,以节约网站的带宽,提升用户的访问体验。默认 Nginx 已经安装该模块,只需要在配置文件中加入相应的压缩功能参数对压缩性能进行优化即可。

  • gzip on: 开启 gzip 压缩输出;
  • gzip_min_length 1k: 用于设置允许压缩的页面最小字节数;
  • gzip_buffers 4 16k: 表示申请 4 个单位为 16k 的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储 gzip 压缩结果;
  • gzip_http_version 1.0: 用于设置识别 http 协议版本,默认是 1.1,目前大部分浏览器已经支持 1.0,1.0 也比较消耗服务器 CPU 资源;
  • gzip_comp_level 2: 用来指定 gzip 压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理速度最慢,使用默认即可;
  • gzip_types text/plain: 压缩类型,是对哪些网页文档启用压缩功能;
  • gzip_vary on: 选项可以让前端的缓存服务器缓存经过 gzip 压缩的页面。

修改 Nginx 的配置文件,加入压缩功能参数

注释:

  • gzip on::开启 Gzip 压缩功能。
  • gzip_buffers 4 64k::设置用于压缩响应的缓冲区数量和大小,这里表示分配 4 个 64KB 的缓冲区。
  • gzip_http_version 1.1::指定启用 Gzip 压缩的 HTTP 协议版本,这里是 HTTP 1.1。
  • gzip_comp_level 2::设置 Gzip 压缩的级别,范围是 1 到 9,2 表示相对较低的压缩级别(压缩速度快,压缩比相对低)。
  • gzip_min_length 1k::指定当响应内容长度大于等于 1KB 时才进行 Gzip 压缩。
  • gzip_vary on::向代理服务器发送 Vary: Accept - Encoding 头信息,让代理服务器根据客户端的 Accept - Encoding 头来决定是否缓存压缩后的内容。
  • gzip_types text/plain text/javascript application/x - javascript text/css text/xml application/xml application/xml+rss::指定对哪些 MIME 类型的内容进行 Gzip 压缩 。

在 Nginx 工作目录建立一个超过 1K 大小的 html 文件,然后使用浏览器访问网址验证,显示使用 gzip 进行了压缩,如图所示。
http://192.168.10.101/index.html

备注:

  • -I:该参数的作用是只获取服务器返回的 HTTP 头部信息,而不获取响应的主体内容。
  • -H:此参数用于在请求中添加自定义的 HTTP 头部信息。在这个例子里,添加的头部信息是 Accept-Encoding: gzip,这表示客户端(也就是发起请求的一方)支持 gzip 压缩格式的响应内容。

nginx 的深度监控

GoAccess 简介

GoAccess 是一个开源实时 Web 日志分析器和交互式查看器,可在 Linux 系统上的终端中或通过浏览器运行。它为需要动态可视化服务器报告的系统管理员提供快速且有价值的 HTTP 统计信息。
GoAccess 解析指定的 Web 日志文件并将数据输出到 X 终端。特点包括:

  • 完全实时:所有面板和指标都定时在终端输出上每 200 毫秒更新一次,在 HTML 输出上每秒更新一次。
  • 所需的最少配置:您只需针对访问日志文件运行它,选择日志格式,然后让 GoAccess 解析访问日志并向您显示统计信息。
  • 跟踪应用程序响应时间:跟踪处理请求所花费的时间。如果您想跟踪减慢网站速度的页面,则非常有用。
  • 几乎所有 Web 日志格式:GoAccess 允许任何自定义日志格式字符串。预定义选项包括 Apache、Nginx、Amazon S3、Elastic Load Balancing、CloudFront 等。
  • 增量日志处理:需要数据持久性?GoAccess 能够通过磁盘持久性选项增量处理日志。
    GoAccess 只有一个依赖项:是用 C 编写的,要运行它,您只需要 ncurses 作为依赖项。就是这样。它甚至拥有自己的 Web Socket 服务器 —— Simple WebSocket Server RFC6455 compliant - GWSocket。
  • 访问者:按小时或日期确定点击量、访问者、带宽和最慢运行请求的指标。每个虚拟主机的指标:拥有多个虚拟主机(服务器块)?它有一个面板,显示哪个虚拟主机消耗了大部分 Web 服务器资源。

GoAccess安装

安装编译依赖

安装文本字体支持

源码编译安装GoAccess

--enable-utf8:启用 Unicode 支持(显示中文必备)。
--with-openssl:支持 HTTPS 日志分析。

配置中文环境

设置系统locale为中文

验证Locale是否生效

GOAccess生成中文报告

[PARSING /usr/local/nginx/logs/access.log] {0} @ {0/s}
WebSocket 服务器已准备接收来自客户的连接
--output=report.html:生成 HTML 报告。
--real-time-html:实时更新报告。

测试访问

浏览器访问 http:// 你的 ip/report.html

nginx vts 简介

Nginx 的 VTS 模块(Virtual Host Traffic Status)是一个开源监控工具,用于实时收集和分析 Nginx 的流量、性能指标及状态数据。以下是其核心功能和特点:

实时监控

统计每个虚拟主机(server 块)的请求量(QPS)、带宽使用、响应时间、连接数等关键指标。支持按状态码(如 2xx、4xx、5xx)分类统计请求。

数据可视化

提供内置监控页面(默认路径 /status),通过图表和表格展示实时及历史数据。支持 JSON 格式输出,方便集成到 Prometheus、Grafana 等监控平台。

扩展性

通过 Lua 脚本扩展自定义监控逻辑(如记录特定 API 的响应时间)。可配置数据存储策略(如保留最近 1 小时的数据)。

报警集成

结合阈值规则触发告警(需配合外部工具如 Zabbix、Telegram Bot)。

nginx vts 安装

需要重新编译 nginx 并扩展 vts 模块

nginx配置开启vts

修改nginx配置文件

测试访问

浏览器访问http://你的ip/vst

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

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

相关文章

【时时三省】Python 语言----牛客网刷题笔记

目录 1,常用函数 1,input() 2,map() 3,split() 4,range() 5, 切片 6,列表推导式 山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 1,常用函数 1,input() 该函数遇到 换行停止接收,返回类型为字符串 2,map() 该函数出镜率较高,目的是将一个可迭…

docker compose yml 启动的容器中,如何使用linux环境变量赋值

在 Docker Compose 中,可以通过环境变量(${VAR} 或 $VAR)来动态配置容器。以下是几种常见的使用方式 - 使用 env_file 加载变量文件 可以单独定义一个环境变量文件(如 app.env),然后在 docker-compose.y…

深入解析Kafka JVM堆内存:优化策略与监控实践

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…

git常用操作命令

本文介绍git常用的操作命令,供大家参考。 1、开始 # 初始化本地git git init# 在初始化的目录中,创建readme.txt,添加到git库中 git add readme.txt git commit -m "写了一个readme.txt文件"2、版本回退 2.1、git reset git lo…

解锁 MCP 中的 JSON-RPC:跨平台通信的奥秘

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等希望看什么,评论或者私信告诉我! 文章目录 零、 背景一、RPC vs HTTP1.1 什么是RPC1.2 为什么需要 RPC?1.3 RPC 解决了什么…

【Redis】第1节|Redis服务搭建

一、Redis 基础概念 核心功能 内存数据库,支持持久化(RDB/AOF)、主从复制、哨兵高可用、集群分片。常用场景:缓存、分布式锁、消息队列、计数器、排行榜等。 安装环境 依赖 GCC 环境(C语言编译)&#xff0…

GitLab-CI简介

概述 持续集成(CI)和 持续交付(CD) 是一种流行的软件开发实践,每次提交都通过自动化的构建(测试、编译、发布)来验证,从而尽早的发现错误。 持续集成实现了DevOps, 使开发人员和运维人员从繁琐的工作中解…

FFmpeg解码器配置指南:为什么--enable-decoders不能单独使用?

FFmpeg解码器配置指南 在FFmpeg的编译配置过程中,许多开发者会遇到关于解码器配置的困惑。特别是--enable-decoders这个选项,很多人误以为启用它就能自动包含所有解码器。本文将深入解析FFmpeg解码器配置的机制,并通过实际测试展示正确的配置…

C++多态与虚函数

C++多态与虚函数详解 多态(Polymorphism)是 C++ 面向对象编程的重要特性,通过统一的接口实现不同的行为。虚函数(Virtual Function)是实现运行时多态的核心机制。以下从多态的构成条件、意义、析构函数的虚函数化、纯虚函数和抽象类,以及虚函数表的底层实现依次介绍。 1.…

游戏引擎学习第313天:回到 Z 层级的工作

回顾并为今天的内容定下基调 昨天我们新增了每个元素级别的排序功能,并且采用了一种我们认为挺有意思的方法。原本计划采用一个更复杂的实现方式,但在中途实现的过程中,突然意识到其实有个更简单的做法,于是我们就改用了这个简单…

ODBC简介

ODBC(Open Database Connectivity)是一个由 Microsoft 制定的标准接口,允许不同的应用程序通过统一的方式访问各种数据库系统。 🧠 简单理解: ODBC 就像是 “翻译官”,在应用程序(如 Excel、Py…

RK3588 buildroot QT 悬浮显示(OSD)

概述 主要介绍在rockchip rk3588 buildroot中 运行QT程序。需要结合之前的文档:认识DRM显示系统、buildroot中QT开发指导、以及如何集成QT库到3588板子上。 场景:在linux开发中,需要使用QT开发程序,做OSD显示。(如下图显示,显示器播放视频,QT页面悬浮于视频上方,显示…

sockaddr_in

在网络编程中&#xff0c;sockaddr_in 结构体是用于表示 IPv4 地址的套接字地址结构。它定义在 <netinet/in.h> 头文件中&#xff0c;是 sockaddr 结构体的一个特化版本&#xff0c;专门用于处理 IPv4 地址。 下面是 sockaddr_in 结构体的典型定义&#xff1a; struct …

有铜半孔工艺的制造难点与工艺优化

技术难点剖析 有铜半孔工艺在制造过程中面临多重挑战&#xff0c;主要集中在材料加工精度、孔壁完整性及良率控制三个方面&#xff1a; 铜层翘起与毛刺残留 半孔成型时&#xff0c;铣刀高速切割可能导致孔壁铜层被拉扯&#xff0c;产生翘起或残留铜屑&#xff0c;影响导电性能…

云原生安全:网络协议TCP详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 &#xff08;注&#xff1a;文末附可视化流程图与专有名词说明表&#xff09; 1. 基础概念 TCP&#xff08;Transmission Control Protocol&#xff09;是…

Dify中的Extension插件开发例子:以neko为例

本文使用Dify v1.0.0-beta.1版本。以neko为例&#xff0c;介绍Dify中的Extension插件开发例子。需要说明的是Dify官方要求Python≥3.12&#xff0c;但发现本地PyCharm调试Python≥3.12有问题&#xff0c;就采用的Python 3.11版本。 一.Extension插件项目创建 1.填写插件信息 …

Linux中logger命令的使用方法详解

文章目录 一、基础语法二、核心功能选项三、‌设施与优先级对照‌1. 常用设施&#xff08;Facility&#xff09;2. 优先级&#xff08;Priority&#xff09;从低到高&#xff1a;3. 组合示例‌ 四、典型使用场景1. 记录简单消息2. 带标签和优先级3. 记录命令输出4. 发送到远程服…

【图论 并集查找】P3671 [USACO17OPEN] Where‘s Bessie? S|普及+

本文涉及知道点 C图论 C并集查找 预计2025年5月29号 7:00发布 P3671 [USACO17OPEN] Where’s Bessie? S 题目描述 Farmer John 一直以精通技术而闻名&#xff0c;他正在测试他的新型无人机搭载的奶牛定位相机。这款相机据说可以拍摄他的田地并自动确定奶牛的位置。不幸的是…

《软件工程》第 13 章 - 软件维护

知识思维导图 13.1 软件维护与进化的概念 1. 核心概念 软件维护&#xff1a;软件交付使用后&#xff0c;为纠正错误、改善性能或其他属性而进行的修改过程软件进化&#xff1a;随着时间推移&#xff0c;软件系统为适应环境变化和用户需求而不断演变的过程 2. 维护类型&#…

AI Agent助力医疗科研突破

最近&#xff0c;AI Agent在医疗科研领域的突破格外引人注目。非营利组织Future House宣布其多智能体系统Robin在约10周内&#xff0c;为干性年龄相关性黄斑变性&#xff08;dAMD&#xff09;发现了一种潜在新疗法&#xff0c;这一成果展示了AI在加速科学发现&#xff0c;特别是…