5月27日 22:13

Nginx 性能调优需要关注哪些关键参数?

Nginx 性能调优需要关注哪些关键参数?

Nginx 调优的核心思路是:减少不必要的系统调用、充分利用内核零拷贝能力、压缩传输体积、避免连接浪费。下面按影响程度从大到小逐项说明。

Worker 进程与连接

worker_processes 设为 auto,让 Nginx 自动匹配 CPU 核心数。worker_rlimit_nofile 调到 100000,避免文件描述符耗尽。每个 worker 的 worker_connections 可设 65535,理论最大并发 = worker 数 × 65535。multi_accept on 让 worker 一次性接收所有就绪连接,accept_mutex off 在高并发下减少锁争用。

nginx
worker_processes auto; worker_rlimit_nofile 100000; events { worker_connections 65535; use epoll; multi_accept on; accept_mutex off; }

零拷贝与传输优化

sendfile on 跳过用户态拷贝,数据从内核直接到 socket。tcp_nopush on 让数据攒满一个包再发,配合 sendfile 减少系统调用次数。tcp_nodelay on 禁用 Nagle 算法,避免小包延迟。三者同时开启并不矛盾:tcp_nopush 在 sendfile 阶段生效,最后一个包由 tcp_nodelay 立即发出。

nginx
sendfile on; tcp_nopush on; tcp_nodelay on;

Gzip 压缩

压缩能将文本响应体积缩减 60%-80%,直接降低带宽和传输耗时。gzip_comp_level 建议设 4-6,再高收益递减但 CPU 开销上升。gzip_min_length 设 1024,避免压缩小响应反而变大。别忘了通过 gzip_types 覆盖 JSON、SVG 等常见 MIME 类型。

nginx
gzip on; gzip_vary on; gzip_min_length 1024; gzip_comp_level 5; gzip_types text/plain text/css application/json application/javascript application/xml image/svg+xml;

连接复用与超时

keepalive_timeout 控制客户端长连接保持时间,默认 75s,可视业务缩短到 30-60s。keepalive_requests 限制单连接最大请求数,防止连接泄漏。对上游服务器也要开长连接:upstream 块中 keepalive 32 保持 32 条空闲连接,减少反复握手开销。

nginx
keepalive_timeout 60s; keepalive_requests 1000; upstream backend { server 10.0.0.1:8080; keepalive 32; }

缓冲区与文件缓存

client_body_buffer_sizeclient_header_buffer_size 按业务调整,过小会触发临时文件写入拖慢请求。open_file_cache 缓存频繁访问的文件描述符,减少磁盘 stat 调用,对静态资源场景效果显著。

nginx
client_header_buffer_size 2k; client_body_buffer_size 128k; open_file_cache max=10000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2;

日志降耗

写日志是高并发下的隐性瓶颈。静态资源 access_log off 直接关掉;动态请求的日志加 buffer=32k flush=5s,写操作先进内存再批量落盘。

追问:调了参数怎么验证效果?

用 wrk 或 ab 做基准测试,对比调优前后的 QPS、P99 延迟和错误率。生产环境通过 stub_status 模块持续监控活跃连接数和请求处理量。记住一个原则:每次只改一个参数,观察效果后再改下一个,否则无法定位哪个改动真正有效。

标签:Nginx