Nginx性能优化与监控实战

笔记定位:面向运维/开发人员的实战手册,聚焦高并发场景下Nginx调优、全链路监控、故障排查,覆盖配置优化、内核调优、监控工具、压测验证全流程

一、Nginx基础架构与性能瓶颈预判

1.1 核心工作模式

  • 多进程+异步非阻塞:master进程管理配置/信号,worker进程处理请求,默认采用epoll事件驱动模型,支持海量并发连接

  • 瓶颈常见点:文件句柄不足、worker进程数不合理、连接数超限、IO阻塞、内核参数限制、静态资源缓存失效、反向代理超时

1.2 优化核心原则

  • 先监控定位瓶颈,再针对性调优,避免盲目改参数

  • 分层优化:内核层 → Nginx配置层 → 业务层 → 缓存层

  • 压测验证:每次调优后用压测工具验证性能提升效果

二.Nginx配置层性能优化(核心)

1.修改用户和组

编译nginx时指定用户和组
  • 在./configure后面指定用户与组的参数
    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
修改nginx配置文件nginx.conf指定用户与组

在http{ }上
vim /usr/local/nginx/conf/nginx.conf
user nginx nginx; #修改用户为nginx,组为nginx

更改进程数与连接数

进程数

  • 高并发环境下,需启动更多 Nginx 进程快速响应请求
  • 用ps aux查看进程
  • master process(主进程)开 1 个
  • worker process(子进程)一般也开 1 个
  • 可修改配置文件中 worker_processes 参数,通常设为 CPU 个数或其 2 倍,需先查看 CPU 核数

nproc-- 显示当前系统可用的 CPU 核心数量

进入nginx的主配置文件nginx.conf
vim /usr/local/nginx/conf/nginx.conf
在http{ }上
worker_processes 用于指定 Nginx 启动的工作进程数量
worker_processes 4;(用4个进程处理用户的请求) (与实际内核(cpu)要匹配)

重启服务
systemctl restart nginx

ps aux 查看进程数
ps -ef |grep nginx

为充分利用多核 CPU 性能,可给 Nginx 不同进程分配不同 CPU 核心,实现 CPU 性能最大化。

连接数

单个进程最大的并发连接数
vim /usr/local/nginx/conf/nginxconf


nginx总并发数:总并发数=worker_processes × worker_connections

静态缓存功能设置

  • Nginx 可给静态资源设置缓存时间,相同内容后续请求直接返回,加快访问速度;
  • 动态网
  • 页不用设缓存时间。
设置静态资源缓存
  • 进入主配置文件
    vim /usr/local/nginx/conf/nginx.conf
    location ~ \.(gif|jpg|png|bmp|ico)$ {
    root html;
    expires 1d;
    }

    nginx -t
    systemctl restart nginx
  • 在cd/usr/local/nginx/html中添加图片
  • 创建index.html

<html>

<body>

<h1>101</h1>

</body>

</html>

验证静态缓存

在浏览器中192.168.10.101/kgc.png

设置连接超时--keepalive_timeout

进入主配置文件

vim /usr/login/nginx/conf/nginx.conf

在http{ }下,server{ }上

日志切割

编写脚本

vim /opt/fenge.sh
#!/bin/bash
#Filename:fenge.sh
d=$(date -d "-1 day" "+%Y%m%d")
logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"

-d $logs_path \] \|\| mkdir -p $logs_path mv /usr/local/nginx/logs/access.log ${logs_path}/test.com-access.log-$d #移动并重命名日志文件 kill -USR1 $(cat $pid_path) #重建新日志文件 find $logs_path -mtime +30 \|xargs rm -rf #删除30天之前的日志文件未读 ![](https://i-blog.csdnimg.cn/direct/899d2896cf134800afad5517d24341b7.png) ##### **设置执行的权限** chmod +x /opt/fenge.sh ls /var/log/nginx ls /usr/local/nginx/logs/access.log ##### **设置crontab任务,定期指向脚本进行日分割** crontab -e 30 1 \* \* \* /opt/fenge.sh 每天凌晨1:30执行fengge.sh ### 配置网页压缩 * Nginx 的 ngx_http_gzip_module 模块可压缩文件,默认已安装,只需在配置文件中设置 gzip 开启、最小压缩字节数、缓存、HTTP 版本、压缩比、压缩类型、缓存服务器支持等参数,就能节约带宽、提升访问体验 ##### **修改主配置文件,加入压缩功能参数** vim /usr/local/nginx/conf/nginx.conf **在http中添加** gzip on; gzip_buffers 4 64k; gzip_http_version 1.1; gzip_comp_level 2; gzip_min_length 1k; gzip_vary on; gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss; ![](https://i-blog.csdnimg.cn/direct/bdff7544a70a47df8b38d53919cd2464.png) 在浏览器中 http://192.168.10.101/index.html ![](https://i-blog.csdnimg.cn/direct/ed6fe7192cf34a659237f6a5d614423e.png) ## 三.nginx的深度监控 解压数据包goaccess-1.7.2.tar.gz ### 核心监控指标 | 指标类型 | 核心指标 | 告警阈值 | |------|------------------------|-------------------------------| | 连接指标 | 活跃连接数、等待连接数、连接拒绝数 | 活跃连接数\>80% worker_connections | | 请求指标 | QPS、请求耗时、5xx/4xx错误率 | 5xx错误率\>1%,平均耗时\>500ms | | 资源指标 | CPU使用率、内存占用、文件句柄数、磁盘IO | CPU\>90%,内存\>85%,句柄数接近上限 | ### GoAccess安装 安装依赖 dnf install -y gcc make ncurses-devel openssl-devel gettext-devel 安装中文字体支持 dnf install -y wqy-microhei-fonts 解压 进入 配置 ./configure -enable-utf8 --with-openssl 编译安装 localectl ### 配置中文环境 ### 设置系统Locale为中文 (依赖包 dnf install -y glibc-langpack-zh localectl set-locale LANG=zh_CN.UTF-8) ### 验证Locale是否生效 locale ### GoAccess生成中文报告 goaccess --log-format=COMBINED --output=/usr/local/nginx/html/report.html --real-time-html /usr/local/nginx/logs/access.log 回车后不要动了 ### 测试访问 去浏览器:192.168.10.101/report.html ![](https://i-blog.csdnimg.cn/direct/7e6aff5e7e554a76abd0117ffc3d6237.png) ## 四.nginx vts简介 ### .nginx vts安装 tar xzf nginx-1.26.3.tar.gz unzip nginx-module-vts-master.zip cd nginx-1.26.3 ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --add-module=/root/nginx-module-vts-master make \&\& make install ### nginx配置开启vts #### 修改nginx配置文件 vim /usr/local/nginx/conf/nginx.conf ![](https://i-blog.csdnimg.cn/direct/cf71c31c60154229b8a1d9fd125445bf.png) ![](https://i-blog.csdnimg.cn/direct/5ebfdf60c52b4816a7a801564058f47c.png) 测试访问

相关推荐
WangJunXiang62 小时前
nginx安全笔记
笔记·nginx·安全
jason_renyu2 小时前
Maven 新手完全使用指南(完整版)
java·maven·maven新手指南·maven新手完全使用指南·maven新手使用教程·maven教程
jolimark2 小时前
Spring Boot 集成 Kettle
java·spring boot·后端
云栖笑笑生2 小时前
Java中变量的定义及注意事项
java
玛卡巴卡ldf2 小时前
【LeetCode 手撕算法】(子串) 560-和为 K 的子数组
java·数据结构·算法·leetcode
wuxinyan1232 小时前
Java面试题45:一文深入了解Spring 事务原理
java·spring·面试·事务
J超会运2 小时前
OpenEuler系统Nginx性能优化全攻略
运维·nginx·性能优化
重庆兔巴哥2 小时前
Java环境变量配置不成功,会有什么症状?
java·开发语言
cjy0001112 小时前
Spring学习——新建module模块
java·学习·spring