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、内存、文件句柄)足以支撑当前的高并发负载,测试处于 "耐心等待" 的执行中状态。
相关推荐
XiaoLeisj1 小时前
Android RecyclerView 实战:从基础列表到多类型 Item、分割线与状态复用问题
android·java
青山是哪个青山3 小时前
Linux 基础与环境搭建
linux·服务器·网络
勇往直前plus3 小时前
从文件到屏幕:Python/java 字符编码、解码、文本处理的底层逻辑解析
java·开发语言·python
Codefengfeng4 小时前
linux系统安装软件教程
linux·运维·服务器
杜子不疼.7 小时前
UU云电脑深度测评:高性价比游戏云电脑,办公版本即将推出
服务器·游戏·电脑
Drifter_yh10 小时前
【黑马点评】Redisson 分布式锁核心原理剖析
java·数据库·redis·分布式·spring·缓存
袁袁袁袁满10 小时前
Linux云服务器如何判断系统是否发生过异常断电?
linux·运维·服务器
莫寒清11 小时前
Spring MVC:@RequestParam 注解详解
java·spring·mvc
cyber_两只龙宝11 小时前
Nginx--企业高性能web服务器高级配置详解
linux·运维·nginx·云原生