worker进程与CPU绑定
NGINX 是单线程多进程架构。正确配置 worker 数量和 CPU 绑定可最大化利用多核处理器性能。
worker 进程数
自动匹配 CPU 核心
nginx
worker_processes auto;
auto 的行为:
- 自动检测 CPU 核心数
- 每个核心启动一个 worker
- 推荐大多数场景使用
worker_processes也可手动指定数字。一般设为 CPU 核心数。存储密集型场景可适当增加。
手动指定
nginx
# 8核服务器
worker_processes 8;
容器环境中
auto可能检测宿主机核心数而非容器限制,需手动设置或使用 cgroup 工具。
CPU 亲和性
worker_cpu_affinity
nginx
# 4核服务器,每个worker绑定一个核心
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
# 8核服务器
worker_processes 8;
worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
位掩码表示 CPU 绑定。
0001绑定 CPU0,1000绑定 CPU3。绑定后减少进程间缓存失效和上下文切换。
自动亲和性
nginx
worker_processes auto;
worker_cpu_affinity auto;
NGINX 1.9.10+ 支持
auto自动分配。Linux 下使用 sched_setaffinity 实现。推荐此方式。
worker 连接数
worker_connections
nginx
events {
worker_connections 1024;
}
- 单个 worker 最大并发连接数
- 总并发 =
worker_processes * worker_connections - 反向代理场景需 ×2(客户端+上游各占一个连接)
默认 512,一般站点设为 1024-4096。需配合
worker_rlimit_nofile调整文件描述符限制。
文件描述符限制
提高上限
nginx
worker_rlimit_nofile 65535;
events {
worker_connections 10240;
}
worker_rlimit_nofile设置 NGINX worker 的 RLIMIT_NOFILE。Linux 默认 1024,高流量站点需提升。同时需调整系统/etc/security/limits.conf。
优先级调整
实时优先级
nginx
worker_priority -5;
- 范围 -20(最高)到 19(最低)
- 默认 0
- 推荐 -5 到 0
降低 nice 值让 worker 进程优先获得 CPU 时间。不建议设太低(如 -20),可能影响系统其他进程。
进程管理
查看 worker 状态
Bash
# 查看 worker 进程
ps aux | grep nginx
# 查看 CPU 亲和性
taskset -cp <pid>
# 查看连接数
ss -s | grep ESTAB
优雅重启
Bash
nginx -s reload
reload信号让 master 启动新 worker,旧 worker 处理完当前请求后退出。实现零停机更新配置。
要点总结
worker_processes auto自动匹配 CPU 核心数worker_cpu_affinity auto自动绑定 CPU 减少缓存失效worker_connections定义单 worker 并发上限worker_rlimit_nofile调整文件描述符限制worker_priority控制 CPU 调度优先级nginx -s reload实现零停机配置更新- 容器环境注意 cgroup 限制,
auto可能不准确
📝 发现内容有误?点击此处直接编辑