nginx多进程架构通过分工隔离、共享复用与精确约束协同优化资源:worker_processes需按物理核心数显式配置并绑定cpu,worker_connections须匹配峰值并发且系统限制同步调高,静态文件启用sendfile避免用户态拷贝,open_file_cache与内存池实现元数据及内存两级复用。

Worker 进程数量与 CPU 资源精准对齐
worker_processes 不该设为 auto(尤其在容器或超线程环境),容易误判逻辑核数导致上下文切换激增。物理核心 ≥16 时,推荐显式设为 8 或 12;4 核机器就设 4。配合 worker_cpu_affinity auto,让每个 Worker 绑定独立物理核,减少缓存失效和调度抖动。
连接资源按需分配,避免句柄与内存冗余
单个 Worker 能处理的连接数由 worker_connections 控制,它必须和实际峰值匹配:比如稳定承载 3 万并发,设 32768 即可,不必拉到 65535。同时要确保系统级限制到位:
- worker_rlimit_nofile ≥ worker_processes × worker_connections
- /etc/security/limits.conf 中 nginx 用户的 nofile 设为 1048576
- /etc/sysctl.conf 加 net.core.somaxconn = 65535
否则启动报 “Too many open files”,不是配置没效,而是系统卡住了。
静态资源路径全程规避用户态内存拷贝
对 .js、.css、图片等静态文件,Nginx 默认走 sendfile on + tcp_nopush on 路径:内核直接从 page cache 把数据送进 socket 发送队列,Nginx Worker 进程里连 1 字节文件内容都不存。这意味着分发 1MB 图片,worker 内存增长几乎为零,只消耗几个指针结构。
高频文件元数据与缓冲区两级复用
open_file_cache 缓存 stat 结果、inode 和打开的 fd,多个请求访问同一文件(如 /favicon.ico)时复用同一个 fd,而不是每次 open()/close();内存池则按连接和请求两级划分——连接建立时分配一块内存,请求进来再从中切小子块,整个请求结束就整块释放,完全避开 malloc/free 频繁调用和碎片问题。
不复杂但容易忽略。











