Linux 下 Too many open files 问题排查与解决
Linux 下 Too many open files 问题排查与解决
作者: Grey
原文地址:
博客园:Linux 下 Too many open files 问题排查与解决
CSDN:Linux 下 Too many open files 问题排查与解决
Too many open files是Linux系统中常见的错误,从字面意思上看就是说程序打开的文件数过多,不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常也可以叫做句柄数超出系统限制。引起的原因就是进程在某个时刻打开了超过系统限制的文件数量以及通讯链接数。
通过命令ulimit -a可以查看当前系统设置的最大句柄数是多少
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31767
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 31767
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看到,open files的配置是1024,可以通过如下命令将open files增加
ulimit -n 65535
这种修改方式可以临时把文件打开数量增加到65535,但是系统重启后这个配置会失效。
还有一种方式是修改系统的配置文件,以Ubuntu为例,配置文件默认在
/etc/security/limits.conf
在这个配置文件中增加
* soft nofile 65535
* hard nofile 65535
如果要查看某个进程目前打开的句柄数量,可以通过如下命令:
lsof -p 进程ID|wc -l
此外,如果用supervisor托管和启动项目,会遇到这个配置无法生效的问题,原因在于supervisor会默认配置打开的句柄数量是1024,
如果要查看某个进程最大open files,可以通过这个进程的进程号对应的limits查看
cat /proc/进程ID/limits
其中有一行是:
Max open files 1024 1024 bytes
supervisor托管的程序这一行默认都是supervisor配置的最大数量1024,这时需要手动改一下supervisor的配置文件,修改方式如下,以Ubuntu系统为例,找到supervisor的配置文件supervisord.conf
在[supervisord]
选项中,增加minfds选项的配置
[supervisord]
minfds=65535 ; min. avail startup file descriptors; default 1024
配置完毕后,需要重启supervisor(以systemctl为例)
systemctl restart supervisor
即可生效
在通过:
cat /proc/进程号/limits
查看下对应进程的可open files的数量
Max open files 65535 65535 bytes
作者:GreyZeng
出处:https://www.cnblogs.com/greyzeng/p/14297258.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
你可以在这里自定义其他内容
本文来自博客园,作者:Grey Zeng,转载请注明原文链接:https://www.cnblogs.com/greyzeng/p/14297258.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了