Nginx 中怎么排查高并发下文件描述符耗尽导致的 502 报错

云丽姑娘_3109

云丽姑娘_3109

2026-11-03

706人浏览

原创

502错误在高并发下由文件描述符耗尽引发,表现为系统拒绝分配新fd导致上游连接失败;需通过error.log中“Too many open files”等提示确认,并同步调大limits.conf、ulimit及worker_rlimit_nofile三层次限制。

nginx 中怎么排查高并发下文件描述符耗尽导致的 502 报错

高并发下 Nginx 报 502,若由文件描述符(file descriptor, fd)耗尽引发,通常不是直接“Nginx 崩了”,而是它在尝试建立连接或转发请求时,系统拒绝分配新 fd——此时上游连不上、连接被拒、或后端响应中断,最终以 502 形式暴露。排查需从日志线索出发,逐层验证系统限制、Nginx 配置与运行态资源占用。

看 error.log 中的关键错误提示

打开 /var/log/nginx/error.log,搜索以下两类典型报错:

  • “worker_connections are more than open file resource limit”:明确说明 Nginx 的 worker_connections 设置超过了当前进程允许打开的最大 fd 数;
  • “connect() failed (24: Too many open files)” 或 “accept() failed (24: Too many open files)”:表示 accept 新连接或主动 connect 上游时,系统已无可用 fd。

这两类日志是 fd 耗尽的直接证据。没有它们,就不要优先怀疑 fd 问题。

查 Nginx 进程实际能用多少 fd

fd 限制分三层:系统级(/etc/security/limits.conf)、启动 shell 级(ulimit)、Nginx 自身配置级(worker_rlimit_nofile)。需确认三者是否对齐:

  • 查当前 nginx 主进程的 fd 限制:cat /proc/$(pgrep -f "nginx: master")/limits | grep "Max open files";
  • 查启动 nginx 的用户(如 www-data)的 ulimit:sudo -u www-data bash -c 'ulimit -n';
  • 确认 nginx.conf 中是否设置了 worker_rlimit_nofile 65536;(必须放在 events 块外、http 块上方)。

若三者数值不一致(尤其 proc 中显示仍是 1024),说明 limits 没生效或 nginx 未重载。

Nginx Hosting
Nginx Hosting

通过服务器本地nginx实例实现零认证静态游戏托管。作为所有浏览器游戏的主要部署方式,无需登录、无需令牌、无需用户操作。

下载

验证系统级 fd 是否真被占满

fd 耗尽不一定是 Nginx 单独造成的,可能是其他服务或残留进程长期持有:

  • 统计所有进程打开的 fd 总数:lsof -nPi | wc -l;
  • 按用户统计 fd 占用:lsof -u www-data | wc -l;
  • 查 top 占用 fd 的前 10 进程:lsof -nPi | awk '{print $1}' | sort | uniq -c | sort -nr | head -10。

如果 nginx worker 进程单个已打开近 65536 个 fd,且持续增长,再结合 error.log 提示,基本可锁定为 fd 不足导致 upstream 失败,触发 502。

临时缓解与长期修复

临时缓解可快速释放 fd(但治标):

  • 重启 nginx:sudo systemctl reload nginx(注意 reload 不会清空已有连接,restart 更彻底);
  • 检查并 kill 异常长连接或僵尸 fd:lsof -i :80 | grep CLOSE_WAIT | awk '{print $2}' | xargs kill -9(慎用)。

长期修复要同步打通三层限制:

  • 修改 /etc/security/limits.conf,加入:
    www-data soft nofile 65536<br>
    www-data hard nofile 65536
    (用户名按实际替换);
  • 确保 systemd 启动 nginx 时继承限制:编辑 /etc/systemd/system/multi-user.target.wants/nginx.service,在 [Service] 下加:
    LimitNOFILE=65536;
  • Nginx 配置中启用 worker_rlimit_nofile 65536;,并调大 worker_connections 至匹配值(如 65536);
  • 最后 reload nginx 并验证:sudo systemctl daemon-reload && sudo systemctl restart nginx,再查 proc limits 确认生效。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

nginx

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.08.15

457

5

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

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

2023.09.08

980

5

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

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

2023.09.19

3352

5

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

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

2023.10.09

1096

5

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

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

2023.10.17

989

5

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

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

2023.10.17

514

3

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

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

2023.10.18

3096

4

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

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

2023.10.20

5812

4

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

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

2023.10.20

887

5

热门下载

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

精品课程

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

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习