开发者社区> 问答> 正文

请问linux 打开文件数最多能多少哇?

开100个docker镜像 会提示 file_path_watcher_linux.cc(318)] inotify_init() failed: Too many open files

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
珍宝珠 2019-08-06 16:22:23 901 0
1 条回答
写回答
取消 提交回答
  • linux的ext3文件系统一级子目录的个数默认为31998(个),准确地说是32000个。 Linux为了cpu的搜索效率而规定的,要想改变数目限制需要重新编译内核。在kernel代码中有这样的: include/linux/ext2_fs.h:#define EXT2_LINK_MAX 32000 include/linux/ext3_fs.h:#define EXT3_LINK_MAX 32000 为什么说31998个呢?这是因为mkdir创建一个目录时,目录下默认就会创建两个子目录的,一个是.目录(代表当前目录),另一个是..目录(代表上级目录)。这两个子目录是删除不掉的,“ rm . ” 会得到“rm: cannot remove `.' or `..'”的提示。所以32000-2=31998。 ext3文件系统下单个目录里的最大文件数无特别的限制,是受限于所在文件系统的inode数。 在一个目录下,touch了100万个文件是没有问题的。但是肯定会受到所在文件系统的inode数的限制。 df -i /dev/sdaX或者使用tune2fs -l /dev/sdaX或者dumpe2fs -h /dev/sdaX查看可用inode数,后两个命令输出结果是一样的,但是跟df所得出的可用inode数会有些误差。 网上有两种解决inode数限制的办法如下  2.1 重新mkfs,mkfs时将inode数调的多一些(根据你fs中文件的总数而定),块尺寸调得小一些(根据每个文件的平均大小而定)  2.2 使用loopback文件系统临时解决:在/usr中(也可以在别处)创建一个大文件,然后做成loopback文件系统,将原来的文件移到这个文件系统中,并将它mount到/usr下合适的位置。这样可以大大减少你/usr中的文件数目。但是系统性能会有点损失。
    

    答案来源网络,供参考,希望对您有帮助

    2019-10-16 15:14:45
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载