一、性能调优方向
1. 系统层面优化
- 内核参数调整
- TCP 队列与连接管理:
- net.core.somaxconn(最大连接队列长度,建议设为65535)
- net.ipv4.tcp_max_syn_backlog(SYN队列长度,建议65535)
- net.ipv4.tcp_tw_reuse和tcp_tw_recycle(加速TIME_WAIT连接回收)57。
- 文件描述符限制:
- 修改/etc/security/limits.conf,设置nofile为65535以上,避免"Too many open files"错误57。
- 临时端口范围:
- 扩大net.ipv4.ip_local_port_range(如1024-65535),支持更多并发连接7。
- TCP 队列与连接管理:
- 硬件与架构优化
- SSD 存储 :提升静态资源访问速度5。
- CPU 绑定 :通过worker_cpu_affinity将Nginx工作进程绑定到特定CPU核心,减少上下文切换9。
2. Nginx 配置优化
- 工作进程与连接数
- worker_processes:设为CPU核心数(如auto自动检测)13。
- worker_connections:每个进程最大连接数(如10240),需结合worker_rlimit_nofile调整13。
- 缓冲区与传输优化
- client_body_buffer_size和client_header_buffer_size:调整请求体与头缓冲区(如16k/4k),避免大请求导致的错误13。
- sendfile和tcp_nopush:启用零拷贝传输,减少CPU消耗79。
- HTTP 协议与 SSL 优化
- 启用HTTP/2协议:listen 443 ssl http215。
- SSL优化:使用TLS 1.3、高性能加密套件(如TLS_AES_128_GCM_SHA256),并开启会话复用15。
- 缓存与压缩
- 静态资源缓存:通过expires和Cache-Control头设置浏览器缓存时间5。
- Gzip压缩:减少传输体积,配置gzip_types包含文本、JSON、JS等格式59。
- 代理缓存:使用proxy_cache_path缓存后端响应,降低后端负载9。
- 负载均衡策略
- 根据场景选择算法:轮询(默认)、最少连接(least_conn)、IP哈希(ip_hash)15。
二、深度监控方案
1. 基础监控指标
- 核心活跃指标
- Active connections(活跃连接数)、Reading/Writing(读写状态连接数)。
- Accepts(总接收连接数)、Handled(成功处理数)、Requests(总请求数)610。
- 性能指标
- QPS (每秒请求数) :通过Requests的增量计算610。
- 错误率 :统计4xx(客户端错误)和5xx(服务端错误)状态码占比610。
- 响应时间 :通过日志中的$request_time分析平均处理耗时610。
2. 监控工具与实现
- Nginx 内置模块
- stub_status 模块:
- 配置示例:
- stub_status 模块:
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
-
-
- 输出示例:Active connections: 23 | Requests: 4550,可解析为每秒请求数、连接状态等26。
-
- 日志分析
- 访问日志 :记录请求时间、状态码、响应时间,结合ELK(Elasticsearch+Logstash+Kibana)进行可视化分析28。
- 错误日志 :监控error.log中的警告与错误事件(如连接超时、SSL握手失败)6。
- 第三方监控系统
- Prometheus+Grafana:
- 使用nginx_exporter采集指标,通过Grafana展示实时仪表盘(如QPS、连接数、错误率)48。
- Zabbix :自定义监控项,触发告警(如连接数超阈值)68。
- Prometheus+Grafana:
- 高级监控模块
- ngx_http_reqstat_module :第三方模块,支持按域名、URL统计请求数、流量等,需重新编译Nginx610。
三、调优与监控实践建议
- 逐步调优 :每次仅修改一个参数,通过压测(如wrk或ab)验证效果7。
- 监控频率 :核心指标(如QPS、错误率)需实时监控,日志分析可按需设置定时任务68。
- 安全与权限 :限制stub_status和监控接口的访问IP,避免信息泄露26。