Nginx配置文件的管理及优化参数

1.指定 Nginx 工作进程(worker process)运行时所使用的系统用户 ,核心作用是权限控制与安全隔离

2.验证与重载

nginx -t:对 /usr/local/nginx/conf/nginx.conf 进行语法检查,验证配置是否合法

nginx -s reload:向 Nginx 主进程(master process)发送重载信号,使其重新加载配置文件。

ps aux | grep nginx:验证进程状态,确认 Nginx 在以预期的用户和模式运行。

3.对 Nginx 进行 进程数与 CPU 亲和性优化

worker_processes2 改为 auto,让 Nginx 自动适配 4 核 CPU。添加 worker_cpu_affinity 配置,将 4 个 worker 进程分别绑定到 4 个核心。

关机修改配置后再开启

验证:每个进程都以 nginx 用户身份运行。

验证 Nginx 的 worker 进程是否按照预期被绑定到了对应的 CPU 核心上

4.提升高并发场景下的处理能力和效率

4.1.在 events 块中调优参数,保存退出后平滑重启 Nginx 服务
  • worker_connections 10000:定义每个 worker 进程能同时处理的最大连接数(包括客户端连接和后端连接)。这里设置为 10000,意味着在 4 个 worker 进程的情况下,理论上最大并发连接数可达 40000,大幅提升了服务的并发承载能力。
  • use epoll :指定 Nginx 使用 epoll 作为事件驱动模型。epoll 是 Linux 下高效的 I/O 多路复用技术,相比传统的 select/poll,它在处理大量并发连接时,性能不会随连接数增加而线性下降,是高并发 Web 服务的首选。
  • accept_mutex on:开启 "互斥锁" 机制,防止多个 worker 进程在处理新连接时产生 "惊群"(thundering herd)问题。它确保同一时间只有一个 worker 进程去 accept 新连接,避免了不必要的上下文切换和资源竞争。
  • multi_accept on:允许 worker 进程在一次事件循环中,接受所有新到达的连接请求,而不是逐个处理。这可以显著提升在连接爆发时的处理效率,减少了多次系统调用的开销。
4.2.测试并发:

遇到系统限制的情况

socket: Too many open files (24):并发数量过多导致访问失败

  • 在 Linux 中,每个网络连接(socket)都对应一个文件句柄。
  • 当你尝试发起 5000 个并发连接时,系统为每个连接分配句柄,但当前用户(或进程)的最大文件句柄数限制(ulimit -n)远小于 5000,导致无法创建新的 socket 连接,测试失败。
4.3.处理本地文件系统的并发文件数量:

/etc/security/limits.conf 是 Linux 中用于配置用户级资源限制的核心文件,通过它可以调整不同用户能使用的最大文件句柄数、最大进程数等关键资源,突破系统默认的低限制,适配高并发服务需求

|------------------------|--------------------------------------------------------------------|-------------------------------------------------|
| * - nofile 100000 | 对所有用户*),同时设置软限制和硬限制(-),将最大文件句柄数nofile)提升至 100000 | 解决 ab 压测和 Nginx 高并发时的文件句柄不足问题(每个网络连接对应一个文件句柄) |
| root - nofile 100000 | 对 root 用户单独设置,最大文件句柄数同样为 100000 | 确保 root 启动的 Nginx 主进程及压测工具(ab)不受文件句柄限制 |
| root - nproc 100000 | 对 root 用户 ,将最大进程数nproc)提升至 100000 | 避免高并发下 Nginx 或其他进程因进程数达到上限而无法创建新进程 |

  • sudo -u nginx ulimit -n

    • 作用:以 nginx 用户的身份,查看其最大文件句柄数限制。
    • 输出 100000:说明 nginx 用户的限制已经成功提升到了 100000,这保证了 Nginx 的 worker 进程在处理大量并发连接时不会因为句柄不足而报错。
  • ulimit -n 100000

    • 作用:在当前 root 用户的 shell 会话中,将最大文件句柄数临时设置为 100000。
    • 输出 100000:说明当前 root 用户的限制也已经是 100000,这保证了你在 root 下执行的 ab 压测工具能够发起足够多的并发连接,不会再出现 Too many open files 的错误。
    • 如果没有输出,可以用 ulimit -n 测试输出是多少,如果是100000就说明临时提升已经生效
4.4.测试

显示Completed 10000/20000/30000/40000/50000 requests,说明Nginx 服务已具备高并发承载能力

  1. 环境问题已解决 :不再出现 Too many open files 报错,证明你之前的 ulimit 临时调整、limits.conf 配置及 Nginx 调优全部生效
  2. 测试正常推进 :压测工具 ab 正在稳定向 Nginx 发送请求,Nginx 能承载 1 万并发的压力,正在持续处理请求。
  3. 进程未中断:系统资源(CPU、内存、文件句柄)足以支撑当前的高并发负载,测试处于 "耐心等待" 的执行中状态。
相关推荐
Titan20247 小时前
Linux环境变量个人笔记
linux·服务器·c++
zx_zx_1237 小时前
传输层协议tcp (2)
服务器·网络·tcp/ip
1.14(java)7 小时前
Spring-boot快速上手
java·开发语言·javaee
青柠代码录7 小时前
【Linux】路径区分:testdir、testdir/、testdir/*
linux·运维·服务器
Darkdreams7 小时前
SpringBoot项目集成ONLYOFFICE
java·spring boot·后端
lhbian7 小时前
【Spring Cloud Alibaba】基于Spring Boot 3.x 搭建教程
java·spring boot·后端
代码雕刻家8 小时前
3.6.Maven-依赖管理-依赖范围
java·maven
范什么特西9 小时前
狂神报错页面设置
java·tomcat
mounter6259 小时前
基于MLX设备的Devlink 工具全指南与核心架构演进
linux·运维·服务器·网络·架构·kernel