QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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:314103

评论

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

AI+CFD:面向空天动力的科学机器学习新方法与新范式

百度开发者中心

飞桨

Sql server之sql注入篇

喀拉峻

网络安全 信息安全 SQL注入

如何帮助金融客户“用好云”?

金融 混合云 数智化

sql审核-避免离线sql导致的db集群故障

名白

sql db sql检测 SQL审核 SQL审批

Web3:创作者经济的黄金时代

CECBC

便捷、高效、智能—从运维视角看星环科技大数据基础平台TDH

星环科技

大数据

x86架构应用如何向Arm架构低成本迁移

北京好雨科技有限公司

Hoo虎符研究院 | 币海寻珠——波卡平行链Moonbeam生态一览

区块链前沿News

虎符交易所 波卡

Form 表单在数栈的应用(上): 校验篇

袋鼠云数栈

大数据 前端

netty系列之:让TCP连接快一点,再快一点

程序那些事

Java Netty 程序那些事 1月月更

【量化投资入门】带你通过恒有数数据接口来实战量化指标

恒生LIGHT云社区

量化策略 量化投资 量化交易 量化

反直觉投资--《香帅中国财富报告》摘录(4/100)

hackstoic

投资

基于javaweb,springboot银行管理系统

叫练

银行 毕业设计 计算机毕业设计

【量化】量化交易入门系列5:量化交易学习书籍推荐(一)

恒生LIGHT云社区

金融科技 量化策略 量化投资 量化交易 量化

Avaya大中华区CTO李农:阿里云计算巢加快Avaya应用云部署

阿里云弹性计算

弹性计算 年度峰会 计算巢

如何保证redis与数据库一致性

zdd

redis

Web or Native 谁才是元宇宙的未来(上)?

Orillusion

开源 WebGL 元宇宙 Metaverse webgpu

Sophon联邦学习,让数据发挥真正的价值

星环科技

联邦学习

Golang:定时器的终止与重置

CRMEB

Go 分布式令牌桶限流 + 兜底策略

万俊峰Kevin

Go 微服务 限流 Go 语言 令牌桶

政法委社会治安防控平台建设,重点人员联防联控系统开发

a13823115807

设计电商秒杀系统

奔奔

12 Prometheus之监控Kubernetes

穿过生命散发芬芳

Prometheus 1月月更

激发数字化时代权益运营新动能

鲸品堂

运营 数字化 通信运营商

一篇域名从购买到备案到解析的详细教程

冴羽

前端 vuepress 域名解析 域名 域名备案

TDengine在中节能风力发电运维系统中的落地实践

TDengine

数据库 大数据 tdengine 物联网

multi-key索引和wildCard索引场景比较

MongoDB中文社区

mongodb

文末有惊喜| 青藤ATT&CK论文入选国家级期刊

青藤云安全

聊聊Netty那些事儿之从内核角度看IO模型

bin的技术小屋

Netty nio Linux Kenel Linux网络编程 #java

CODING 携手 Thoughtworks 助力老百姓大药房打造“自治、自决、自动”的敏捷文化

CODING DevOps

敏捷 thoughtworks CODING 项目协同 老百姓大药房

MongoDB find getmore操作慢问题排查

MongoDB中文社区

mongodb

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