Nginx排查由于`sysctl fs.file-max`设置过小导致整台ECS服务器瘫痪

冬磊酱_5753

冬磊酱_5753

2026-09-19

479人浏览

原创

fs.file-max过小会拖垮整台服务器,因其是内核级全局文件描述符硬上限,一旦耗尽,所有进程open/socket/epoll等系统调用均失败,导致ssh登录卡顿、systemd异常、nginx无法accept新连接;需通过cat /proc/sys/fs/file-nr确认是否接近阈值,并立即sysctl -w fs.file-max=1048576临时修复,再永久写入/etc/sysctl.conf及同步调整nginx worker_rlimit_nofile。

nginx排查由于`sysctl fs.file-max`设置过小导致整台ecs服务器瘫痪

当 Nginx 出现大量 open() failed (24: Too many open files) 错误,同时服务器响应极慢、SSH 登录卡顿、甚至监控失联,很可能是 fs.file-max 被设得过小,触发内核级文件描述符耗尽,导致整个 ECS 实例陷入半瘫痪状态。

为什么 fs.file-max 过小会拖垮整台服务器?

fs.file-max 是 Linux 内核允许系统全局打开的最大文件描述符数量(包括普通文件、socket、管道、eventfd 等)。它不是单个进程的限制,而是全系统硬上限。一旦达到该值:

  • 所有新进程无法成功调用 open()socket()epoll_create() 等系统调用;
  • SSH 登录失败(sshd 需要创建 socket 和 session 文件);
  • systemd 服务启动/重启失败;
  • Nginx 工作进程无法 accept 新连接,worker 进程频繁 crash 或 hang;
  • 即使 ulimit -n 设置合理,也会因内核拒绝分配而失效。

如何快速确认是 fs.file-max 导致的问题?

在还能登录的前提下,执行以下命令:

Nginx Config Linter
Nginx Config Linter

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

下载
  • 查当前使用量cat /proc/sys/fs/file-nr —— 输出三列:已分配未释放数 未使用数 file-max 值。若第一列接近第三列(如 199876 0 200000),说明几乎耗尽;
  • 查历史峰值cat /proc/sys/fs/file-nr 中第二列长期为 0,且第一列持续增长,表明文件描述符“只增不减”,常见于连接未正确关闭或泄漏;
  • 查 Nginx 日志grep "Too many open files" /var/log/nginx/error.log | tail -20,高频出现即强信号;
  • 对比默认值:主流 ECS(如阿里云 4C8G)默认 fs.file-max ≈ 70000~100000,若被手动改成 1638432768,极易击穿。

临时恢复 + 永久修复方法

⚠️ 注意:修改前确保有控制台 VNC 或云厂商救援模式访问能力,避免改崩后失联。

  • 临时缓解(立即生效)sudo sysctl -w fs.file-max=1048576(推荐至少 1M);
  • 永久生效:编辑 /etc/sysctl.conf,追加一行:fs.file-max = 1048576,再运行 sudo sysctl -p
  • 同步调整 Nginx 配置:在 nginx.confmain 块中加入:worker_rlimit_nofile 1048576;,并确保每个 worker_connections × worker_processes ≤ 该值;
  • 检查是否被云平台覆盖:部分 ECS 镜像(如某些 CentOS 官方镜像)会在 /etc/sysctl.d/ 下有 99-cloud.conf 等文件,优先级更高,需一并修改。

预防建议:不要只盯 ulimit

很多运维只调大 ulimit -n(用户级限制),却忽略内核级的 fs.file-max,这是典型盲区:

  • ulimit -n 是 per-process 上限,受 fs.file-max 约束;
  • 一个 Nginx worker 进程最多打开 worker_connections 个连接,但系统还需为日志文件、共享内存、定时器、第三方模块(如 lua-resty-redis)等预留空间;
  • 估算公式(保守):fs.file-max ≥ (worker_connections × worker_processes) × 2.5;例如 4 核机器配 4 个 worker、每个 1024 连接,则至少需要 4 × 1024 × 2.5 ≈ 10240,但建议直接设为 1048576(1M),现代服务器内存足够支撑;
  • 上线前用 abwrk 压测时,同步监控 cat /proc/sys/fs/file-nr,观察趋势。

相关专题

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

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

2023.08.15

397

5

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

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

2023.09.08

820

5

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

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

2023.09.19

2312

5

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

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

2023.10.09

796

5

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

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

2023.10.17

669

5

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

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

2023.10.17

354

3

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

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

2023.10.18

2056

4

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

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

2023.10.20

3792

4

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

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

2023.10.20

627

5

热门下载

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

精品课程

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

共0课时 | 0人学习

nginx手册
nginx手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习