Nginx 优化

admin
2025-06-16 / 0 评论 / 5 阅读 / 正在检测是否收录...

Nginx 的优化是一个系统工程,涉及服务器硬件、操作系统、Nginx 配置本身,以及您所服务的应用类型。

核心配置优化 (Master-Worker 架构)

Nginx 采用 Master-Worker 架构,一个 Master 进程负责读取和解析配置,管理 Worker 进程;Worker 进程则负责处理实际的请求。

1. worker_processes auto;

 auto 是 Nginx 1.8.1 及更高版本推荐的值。Nginx 会根据可用的 CPU 核心数自动调整 Worker 进程的数量。这样可以最大化 CPU 利用率,并避免手动设置可能导致的资源浪费或不足。

1. 为什么是 CPU 核心数?

 Nginx 是事件驱动的非阻塞服务器。一个 Worker 进程可以高效处理数万甚至数十万并发连接,因为当一个连接处于等待状态(例如等待数据从磁盘读取或网络发送)时,Worker 进程可以立即切换到处理另一个连接。过多的 Worker 进程会导致:

上下文切换开销: 操作系统需要花费更多时间在 Worker 进程之间切换,这会抵消并行处理带来的益处。

内存消耗: 每个 Worker 进程都会消耗一定的内存。

  • 磁盘 I/O 密集型应用 (如大型静态文件服务器):** 如果您的 Nginx 主要用于提供大量静态文件,并且这些文件分散在不同的磁盘上,那么适当增加 Worker 进程数量(可能略高于 CPU 核心数)可能有助于利用多磁盘的并行 I/O 能力。但这需要仔细测试。
  • CPU 密集型模块 (不常见): 如果您使用了某些 CPU 密集型的 Nginx 模块 (例如自定义的 Lua 脚本执行大量计算),那么也可能需要根据实际情况调整。但对于常规使用,auto 或 CPU 核心数通常是最佳选择。

worker_connections 10240;(示例子值)

 这是单个 Worker 进程可以处理的最大并发连接数。这个值直接影响 Nginx 服务器的总并发能力:总并发连接数 = worker_processes * worker_connections

文件描述符 (File Descriptors - FD):

 每个连接在操作系统中都会占用一个文件描述符。因此,worker_connections 的值不能超过操作系统对单个进程允许的最大文件描述符数量(ulimit -n)。

系统级限制:

 还需要检查系统级的最大文件描述符限制 (/proc/sys/fs/file-max)。

内存消耗

 每一个连接都会消耗少量内存,如果 worker_connections 设置过大,可能会导致内存不足。

还待更新

1

评论 (0)

取消