Ubuntu 服务器运行缓慢,日志报错:“Too many open files in system!” 解决方法!

运维在Ubuntu中常遇到的大坑,“Too many open files in system!”

服务器运行缓慢,经常报错520或521错误,然后CPU和内存使用都不高,硬盘也没有跑满,遇到这样的问题很多人以为问题出在PHP上,其实除了PHP性能之外,还有一个重要的因素,那就是文件系统资源耗尽,听着挺不可思议的,没错,就是在Ubuntu中可以打开的文件数超限了!

在网络上搜索了一下,遇到这类问题的还挺多的!下面就教大家如何快速解决这个问题!

!” 这个错误是 Linux/Ubuntu 系统常见的资源限制问题,表示服务器的文件描述符(file descriptors)已耗尽,无法打开新连接。 在 CyberPanel 或 LiteSpeed 环境中(如 HttpListener 用于 Web 服务器),高流量时 Nginx/Apache/MySQL 等进程打开过多 socket/file,导致 "Too many open files" 崩溃。您的 CPU/内存/硬盘正常,确认是描述符瓶颈(默认用户限 1024,全局 65536)。这会中断新请求,放大 520/504 错误率 50%+。 幸运的是,修复只需调整 ulimit 和 sysctl,5-10 分钟生效。

"Too Many Open Files" 错误排查与解决:Ubuntu 服务器高打开文件数分析

在 Ubuntu/Linux 服务器管理中,"Too many open files in system!" 错误是典型的资源耗尽信号,表示系统文件描述符(file descriptors)上限被触顶,无法打开新文件或 socket 连接。 您的日志显示 ulimit -n = 65535(用户/进程限制)和 /proc/sys/fs/file-max = 65535(全局系统限制),但 lsof | wc -l = 2211319(当前打开文件数),远超上限。这不是硬件问题(CPU/内存/硬盘正常),而是文件句柄泄漏或高并发应用(如 Web 服务器、数据库)未及时关闭连接导致的积累。根据 Server Fault 和 Ask Ubuntu 社区经验,90% 案例源于 Nginx/Apache/MySQL 进程句柄未释放,在流量峰值时雪崩式爆发,引发 502/504 错误或服务崩溃。幸好,这可通过临时/永久限额提升和进程诊断快速修复。

排查打开文件:谁打开了什么?

用 lsof 工具(已安装)分类诊断,按进程/类型查看:

lsof | wc -l

按进程查看打开文件数(找出罪魁祸首):

lsof | awk '{print $2}' | sort | uniq -c | sort -nr | head -10  # 列出前 10 高进程

实时监控:watch -n 5 'lsof | wc -l'  每 5 秒刷新,观察增长。

系统默认的最大文件配额是65535 如果打开的文件大于65535之后,所有打开的文件需要进入列队等候,这时候访问操作都会变得缓慢。

解决方法:提升限额与根源修复

编辑/etc/security/limits.conf文件,增加配额

sudo vi /etc/security/limits.conf

拉到最下面,将65535全部改成4194304

然后编辑/etc/sysctl.conf文件

vi /etc/sysctl.conf

修改 fs.file-max 参数:

fs.file-max = 4194304

应用配置文件:

sudo sysctl -p

全部设置完毕后重启 sudo reboot。

重新启动后,速度是不是变快了!

점수

댓글남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다