Nginx排查高并发下由于文件描述符耗尽导致的504 Gateway Time-out

酷明大大_4281

酷明大大_4281

2026-09-25

975人浏览

原创

504 gateway time-out在高并发下可能源于nginx文件描述符(fd)耗尽,而非后端慢或超时设置短;需通过error.log查“too many open files”、lsof查fd数量、ulimit与/proc/limits确认限制,并调整systemd limitnofile、启用upstream keepalive、合理设置worker_connections及上游fd限制来根治。

nginx排查高并发下由于文件描述符耗尽导致的504 gateway time-out

504 Gateway Time-out 在高并发场景下,有时并非后端慢或超时配置短,而是 Nginx 自身因系统资源枯竭——尤其是 文件描述符(file descriptor, fd)耗尽——导致无法建立或维持与上游服务的连接,最终在日志中表现为 upstream timed out 或 connect() failed (24: Too many open files)。这种问题隐蔽性强:CPU、内存、网络看似正常,但请求批量失败,且错误率随并发上升陡增。

确认是否为文件描述符不足引发的504

不要直接调大超时参数。先验证根本原因:

  • 查 Nginx 错误日志:/var/log/nginx/error.log 中搜索 Too many open files、open() failed (24:、accept() failed (24: —— 这是 fd 耗尽最直接的信号
  • 查当前 Nginx 进程打开的 fd 数量:lsof -p $(cat /var/run/nginx.pid) | wc -l 或 ls /proc/$(cat /var/run/nginx.pid)/fd | wc -l
  • 查系统级限制:ulimit -n(查看当前 shell 限制)、cat /proc/$(cat /var/run/nginx.pid)/limits | grep "Max open files"(查看 Nginx 进程实际生效值)
  • 对比系统最大可分配 fd:cat /proc/sys/fs/file-max,再看已使用量:cat /proc/sys/fs/file-nr(三列中第一列为已分配未释放数)

Nginx 进程级 fd 限制必须显式提升

Linux 系统默认的 ulimit -n 通常为 1024,远低于高并发 Web 服务需求。Nginx 启动时继承的是启动用户的限制,仅修改 /etc/security/limits.conf 不足以生效,还需配合 systemd 配置(若用 systemctl 管理):

Nginx Config Linter
Nginx Config Linter

对 Nginx 配置文件进行语法检查、验证和安全、性能审计。

下载
  • 编辑 /etc/systemd/system/multi-user.target.wants/nginx.service 或 /lib/systemd/system/nginx.service
  • 在 [Service] 段下添加:
    LimitNOFILE=65536
    LimitNPROC=65536
  • 重载并重启:sudo systemctl daemon-reload && sudo systemctl restart nginx
  • 验证:重启后执行 cat /proc/$(cat /var/run/nginx.pid)/limits | grep "Max open files",确认 soft/hard limit 均为 65536

优化 Nginx 配置以降低 fd 消耗压力

即使提升了上限,也需减少不必要的 fd 占用,尤其在连接密集型场景(如长轮询、HTTP/2、Keepalive 上游):

  • 启用 upstream keepalive:避免每个请求都新建 TCP 连接
    upstream backend {<br>  keepalive 32;<br>  server 127.0.0.1:9000;<br>}

    并在 location 中加:
    proxy_http_version 1.1;<br>proxy_set_header Connection '';
  • 合理设置 worker_connections:该值不能超过 ulimit -n 的 soft limit;建议设为 limit_n / (2 * worker_processes) 左右(预留 fd 给日志、临时文件等)
  • 关闭非必要日志写入:高并发下 access_log off; 或使用缓冲日志(access_log /path/log main buffer=64k flush=5s;)可显著减少 write() 系统调用和 fd 持有时间
  • 限制客户端连接数:用 limit_conn 和 limit_req 防止单 IP 滥用 fd 资源

关联排查:上游服务也需同步检查 fd 限制

Nginx fd 耗尽常是“多米诺骨牌”的最后一节。若上游是 PHP-FPM、Gunicorn 或 Node.js,它们同样受限于 fd:

  • PHP-FPM:检查 pm.max_children 与 rlimit_files 设置,确保其 rlimit_files ≥ pm.max_children × 2(每个子进程至少需 1 个监听 socket + 多个连接 socket)
  • Java 应用:检查 JVM 启动参数是否设置了 -XX:MaxDirectMemorySize 或 netty 的 io.netty.maxDirectMemory,间接影响 fd 分配
  • 通用验证:对上游服务 PID 执行 ls /proc/{pid}/fd | wc -l,确认其 fd 使用量是否逼近上限

文件描述符不是性能瓶颈的“替罪羊”,而是高并发链路中真实存在的硬性闸门。它不报错时一切如常,一旦触顶,就会让所有等待中的请求在网关层无声超时——表面是 504,实则是连接已无法发起。调优不是堆参数,而是让每一份 fd 都用在刀刃上。

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

417

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

840

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2432

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

816

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

729

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

374

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2196

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4032

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

647

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习