Nginx性能优化与监控

一、Nginx性能优化核心思路

Nginx性能优化的核心目标:提升并发处理能力、降低响应延迟、减少资源占用(CPU、内存、IO),同时保证服务稳定性。优化需结合服务器硬件配置、业务场景(静态资源、反向代理、API网关等),避免盲目调优,优先解决瓶颈问题。

二、具体优化配置

(一)核心连接与进程配置(nginx.conf全局块)

Nginx的进程模型由主进程(管理配置、启动子进程)和子进程(处理请求)组成,合理配置进程数和连接数是基础。

1. 工作进程数:建议设置为CPU核心数(或核心数*2),避免过多进程抢占资源 worker_processes auto; # auto会自动识别CPU核心数,推荐使用 # 2. 每个工作进程的最大连接数(关键) worker_connections 10240; # 单个worker进程可同时处理的连接数,默认1024,根据内存调整 # 注意:实际并发数 = worker_processes * worker_connections / 2(HTTP1.1协议,每个请求占2个连接) # 3. 连接超时配置(避免连接占用资源) keepalive_timeout 65; # 长连接超时时间,单位秒,一般设置60-120s keepalive_requests 100; # 单个长连接可处理的最大请求数,避免长连接长期占用

(二)HTTP核心配置(http块)

1. 缓存优化(静态资源缓存,减轻后端压力)

开启gzip压缩(减少传输体积,提升加载速度) gzip on; gzip_min_length 1k; # 小于1k的文件不压缩,避免浪费CPU gzip_types text/plain text/css application/json application/javascript image/jpeg; # 需压缩的文件类型 gzip_comp_level 6; # 压缩级别(1-9),级别越高压缩率越高,CPU消耗越大,推荐6 gzip_vary on; # 告诉浏览器当前请求支持gzip,避免缓存错乱 # 静态资源缓存(浏览器端缓存,减少重复请求) location ~* \.(jpg|jpeg|png|gif|css|js)$ { root /usr/share/nginx/html; # 静态资源路径 expires 7d; # 缓存7天,根据资源更新频率调整(如js/css可设1d,图片可设30d) add_header Cache-Control "public, max-age=604800"; # 配合expires,增强缓存效果 etag on; # 开启ETag,基于文件内容生成标识,避免缓存失效误判 }

2. 连接与请求优化

关闭不必要的日志(减少IO开销,生产环境推荐) access_log off; # 完全关闭访问日志,或指定日志路径并开启缓冲 # access_log /var/log/nginx/access.log main buffer=16k; # 开启日志缓冲,减少磁盘IO # 限制请求体大小(避免大请求占用资源) client_max_body_size 10m; # 根据业务调整,如文件上传场景可设50m-100m # 开启TCP_NODELAY(减少延迟,适合小数据包场景) tcp_nodelay on; # 开启TCP_CORK(合并小包,适合大文件传输,减少网络开销) tcp_cork on;

(三)反向代理优化(若用作反向代理/网关)

后端服务连接池配置(避免频繁建立TCP连接) upstream backend_server { server 192.168.1.100:8080; server 192.168.1.101:8080; keepalive 32; # 后端长连接数,保持与后端的持久连接,减少握手开销 proxy_connect_timeout 5s; # 与后端连接超时时间 proxy_read_timeout 10s; # 读取后端响应超时时间 proxy_send_timeout 10s; # 向后端发送请求超时时间 } location /api { proxy_pass http://backend_server; proxy_set_header Host host; # 传递客户端Host头,避免后端获取错误 proxy_set_header X-Real-IP remote_addr; # 传递客户端真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }

(四)硬件与系统层面辅助优化

调整系统文件描述符限制:Nginx处理连接依赖文件描述符,需修改系统配置(/etc/security/limits.conf),添加 nginx soft nofile 65535nginx hard nofile 65535,重启Nginx生效。

关闭SELinux(生产环境可根据安全需求调整,避免其限制Nginx资源访问)。

使用SSD存储静态资源,提升磁盘IO速度;若静态资源量大,可搭配CDN加速。

三、Nginx监控核心要点

监控目标:实时掌握Nginx运行状态、请求情况、资源占用,及时发现异常(如连接数过高、响应延迟、错误率飙升),为优化和故障排查提供依据。

(一)基础监控

1. Nginx内置状态监控

开启status模块,可查看连接数、请求数、处理状态等核心指标,无需额外安装工具。

在http块或server块中添加状态监控配置 location /nginx_status { stub_status on; # 开启状态监控 allow 192.168.1.0/24; # 允许访问的IP段(安全限制,避免公网访问) deny all; # 拒绝其他IP访问 }

访问 http://IP/nginx_status,返回结果解读:

Active connections:当前活跃的连接数(包含等待连接的连接)。

accepts:总接受的连接数。

handled:总处理的连接数(一般与accepts一致,若不一致说明有连接拒绝)。

requests:总处理的请求数。

Reading:正在读取客户端请求头的连接数。

Writing:正在向客户端发送响应的连接数。

Waiting:等待客户端请求的空闲连接数(长连接场景下会较多)。

2. 系统命令监控(快速排查)

1. 查看Nginx进程状态(是否正常运行) ps -ef | grep nginx # 2. 查看Nginx占用的端口(确认监听端口是否正常) netstat -tlnp | grep nginx # 3. 查看Nginx资源占用(CPU、内存) top -p $(pgrep nginx) # 查看Nginx进程的CPU和内存占用 ps aux | grep nginx # 查看详细资源占用 # 4. 查看请求日志(排查异常请求) tail -f /var/log/nginx/access.log # 实时查看访问日志 tail -f /var/log/nginx/error.log # 实时查看错误日志(关键,排查故障)

(二)高级监控(第三方工具)

1. Prometheus + Grafana

实现Nginx指标的可视化监控、告警,支持长期数据存储和趋势分析。

部署流程:安装Prometheus → 安装Nginx_exporter(采集Nginx指标) → 配置Prometheus抓取指标 → 部署Grafana → 导入Nginx监控模板(推荐模板ID:12708)。

核心监控指标:请求量(QPS)、响应时间、错误率(4xx/5xx)、连接数、CPU/内存占用、缓存命中率。

2. Zabbix(企业级监控)

适合已有Zabbix监控体系的场景,通过Zabbix Agent采集Nginx指标,配置告警规则(如连接数过高、错误率超标时触发告警)。

四、优化与监控注意事项

调优前先测试基准性能:使用ab(Apache Bench)、wrk等工具压测,确定当前瓶颈(如连接数不足、CPU占用过高、IO瓶颈),再针对性优化。

配置修改后,需平滑重启Nginx(nginx -s reload),避免服务中断。

监控需设置合理告警阈值:如活跃连接数超过80%、错误率超过1%、响应时间超过500ms时触发告警,及时处理异常。

避免过度优化:如gzip压缩级别过高会占用大量CPU,需在压缩率和CPU消耗之间找平衡;长连接超时时间过长会占用过多连接资源。

生产环境建议开启日志轮转(logrotate),避免日志文件过大占用磁盘空间。

五、常用压测工具

1. ab工具(简单易用,适合快速压测) ab -n 10000 -c 100 http://IP/ # 发起10000个请求,并发100个 # 2. wrk工具(性能更好,支持更多参数) wrk -t 4 -c 100 -d 30s http://IP/ # 4个线程,100个并发,压测30秒

压测重点关注:QPS(每秒处理请求数)、平均响应时间、95%响应时间、错误率,优化后对比压测结果,验证优化效果。

相关推荐
margu_1682 小时前
【Docker】nscenter命令详解
运维·docker·容器
ckm紫韵2 小时前
影刀自动化工作流RPA采集教程
运维·自动化·rpa
yy55273 小时前
Nginx 安全防护与 HTTPS 部署实战
nginx·安全·https
WangJunXiang63 小时前
Nginx性能优化与监控笔记
笔记·nginx·性能优化
REDcker3 小时前
Linux Core Dump 配置与分析指南
linux·运维·服务器
IMPYLH3 小时前
Linux 的 chcon 命令
linux·运维·服务器
苦逼IT运维3 小时前
SVN 仓库目录迁移,仓库 “降级” 成子目录实战
linux·运维·ci/cd·svn·运维开发
阿拉斯攀登3 小时前
第 13 篇 输入设备驱动(触摸屏 / 按键)开发详解,Linux input 子系统全解析
android·linux·运维·驱动开发·rk3568·瑞芯微·rk安卓驱动
ego.iblacat4 小时前
Nginx 性能优化与深度监控
运维·nginx·性能优化