全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-20 6 分钟 ✍️ juanwangdev

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 可能不准确

📝 发现内容有误?点击此处直接编辑

← 上一篇 sendfile零拷贝
下一篇 → 事件驱动模型优化
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库