写点什么

Too many open files 的四种解决办法

  • 2020-02-17
  • 本文字数:1419 字

    阅读完需:约 5 分钟

Too many open files的四种解决办法

【摘要】 Too many open files 有四种可能:一 单个进程打开文件句柄数过多,二 操作系统打开的文件句柄数过多,三 systemd 对该进程进行了限制,四 inotify 达到上限.


领导见了孔乙己,也每每这样问他,引人发笑。孔乙己自己知道不能和他们谈天,便只好向我们新员工说话。有一回对我说道,“你定位过问题么?”我略略点一点头。他说,“定位过,……我便考你一考。Too many open files,怎样解决?”我想,考评垫底的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,“不能解决罢?……我教给你,记着!这些方法应该记着。将来做接口人的时候,定位问题要用。”我暗想我和接口人的等级还很远呢,而且我们领导也从不将问题定位记功;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不是 ulimit 太小么?”孔乙己显出极高兴的样子,将两个指头的长指甲敲着白板,点头说,“对呀对呀!……Too many open files 有四种可能,你知道么?”我愈不耐烦了,努着嘴走远。孔乙己却像是没有看到,自顾自的在白板上画了起来。

一 单个进程打开文件句柄数过多

ulimit 中的 nofile 表示单进程可以打开的最大文件句柄数,可以通过 ulimit -a 查看,子进程默认继承父进程的限制(注意,是继承,不是共享,子进程和父进程打开的文件句柄数是单独算的)。


网上还有一种解读是 nofile 表示单用户可以打开的文件句柄数,因为他们在 limit.conf 中看到类似于“openstack soft nofile 65536”,便认为是 openstack 用户最多可以打开的文件句柄数。该解读是错误的,“openstack soft nofile 65536”表示的含义是当你执行"su - openstack"切换到 openstack 用户后,你创建的所有进程最大可以打开的文件句柄数是 65536。


要查看一个进程可以打开的文件句柄数,可以通过“cat /proc/<pid>/limits”查看。


要修改 ulimit 中的 nofile,可以通过修改/etc/security/limits.conf 文件,在其中加入类似“openstack soft nofile 65536”的语句来进行修改。修改完成后,可以通过“su - openstack”切换用户,或者重新登录,来使该配置生效。


要动态修改一个进程的限制,可以使用 prlimit 命令,具体用法为:“prlimit --pid ${pid} --nofile=102400:102400”。

二 操作系统打开的文件句柄数过多

整个操作系统可以打开的文件句柄数是有限的,受内核参数“fs.file-max”影响。


可以通过执行“echo 100000000 > /proc/sys/fs/file-max”命令来动态修改该值,也可以通过修改"/etc/sysctl.conf"文件来永久修改该值。

三 systemd 对该进程进行了限制

该场景仅针对被 systemd 管理的进程(也就是可以通过 systemctl 来控制的进程)生效,可以通过修改该进程的 service 文件(通常在/etc/systemd/system/目录下),在“[Service]”下面添加“LimitNOFILE=20480000”来实现,修改完成之后需要执行"systemctl daemon-reload"来使该配置生效。

四 inotify 达到上限

inotify 是 linux 提供的一种监控机制,可以监控文件系统的变化。该机制受到 2 个内核参数的影响:“fs.inotify.max_user_instances”和“fs.inotify.max_user_watches”,其中“fs.inotify.max_user_instances”表示每个用户最多可以创建的 inotify instances 数量上限,“fs.inotify.max_user_watches”表示么个用户同时可以添加的 watch 数目,当出现 too many open files 问题而上面三种方法都无法解决时,可以尝试通过修改这 2 个内核参数来生效。修改方法是修改"/etc/sysctl.conf"文件,并执行"sysctl -p"。


2020-02-17 11:314752

评论

发布
暂无评论
发现更多内容

Ask Milvus Anything!聊聊被社区反复@的那些事儿 Ⅰ

Zilliz

非结构化数据 Milvus 向量数据库 deepdive

Databend 开源周报第 110 期

Databend

序列化与反序列化一棵树

程序员在修行

关于身心灵学习的感悟1

程序员在修行

为什么越来越多的学校使用云桌面?

青椒云云电脑

桌面云 云桌面

英特尔产品组合针对多规模AI模型性价比优势明显

E科讯

Mybatis中传递多个参数的4种方法

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

使用消息队列有什么优点?有什么缺点?

程序员在修行

一文读懂私有云、公有云和本地化部署

青椒云云电脑

公有云 私有云

Footprint Analytics 为 ABGA Web3 Gaming Summit 提供支持,助力 Web3 游戏行业发展

Footprint Analytics

议题征集|Flink Forward Asia 2023 正式启动

Apache Flink

flink

大模型的东风中,看雄安的数字飞翔

脑极体

数字化

Footprint Analytics 团队参与 Token 2049,为多场活动以及演讲提供数据支持

Footprint Analytics

区块链 公链

【转载】JVM实际内存占用超过Xmx的原因,设置Xmx的技巧

虚实的星空

Java

数字化转型与架构-架构设计篇|如何开发一个各部门都满意的系统?

数字随行

数字化转型

英文阅读 The manager's path 1.3

程序员在修行

腾讯云 CODING 入选“数智影响力”数字化转型创新典型案例

CODING DevOps

基于Vue3前后端分离的低代码开发框架

互联网工科生

Vue 软件开发 低代码 JNPF

不知道该选公有云还是私有云?这些客户请选私有云

青椒云云电脑

桌面云 云桌面

从构建者到设计者的低代码之路

树上有只程序猿

软件开发 低代码

9月24日,线下见个面?

MatrixOrigin

数据库 分布式 MatrixOrigin MatrixOne

Last Week in Milvus

Zilliz

非结构化数据 Milvus Zilliz 向量数据库

ARTS 打卡第四周

程序员在修行

企业高管IT战略指南——为何要落地平台工程

York

容器 DevOps 云原生 敏捷 平台工程

云桌面怎么选,好产品的标准是什么

青椒云云电脑

桌面云 云桌面

INFINI Easysearch 与兆芯完成产品兼容互认证

极限实验室

easysearch 兆芯 国产适配

高校云桌面的“正确打开方式”是什么?

青椒云云电脑

云桌面 云桌面方案

用AI提高代码质量,同事对我的代码赞不绝口~

飞算JavaAI开发助手

亚信科技与中国信通院达成全方位、跨领域战略合作

亚信AntDB数据库

AntDB 国产数据库 AntDB数据库

Too many open files的四种解决办法_服务革新_华为云开发者联盟_InfoQ精选文章