linux一个文件夹内最多能放多少文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux一个文件夹内最多能放多少文件相关的知识,希望对你有一定的参考价值。

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中的文件数目。但是系统性能会有点损失。
参考技术A Linux私房菜基础版第八章第一小节讲的是文件系统(ext2),个人觉得文件夹和文件是相同的,只是文件夹占用的空间很小,能放多少子文件夹取决于文件系统容量和最小区块大小,因为文件夹占用空间很小也就是硬盘容量越大,最小区块空间越小(win默认512B)能当的子文件夹越多。 参考技术B 512个是根目录限制,其他目录还是没关系的。
ntfs和linux
ext3应该都有限制,
这可能有硬盘技术决定,和分区性质无关
参考技术C 文件数限制:
系统所能生成的总的文件数受系统所剩节点数限制,执行
tune2fs
-l
/dev/sda1(目录所在的分区)
|grep
inodes
可以查看剩余节点数
在一台ext3的系统中执行,结果为
Free
inodes:
845504
目录数限制:
RHEL4.3中,在
同一个路径下,一级子目录的个数限制为31998
。如果你的应用生成的目录可能会超过这个数,那要注意进行目录分级。例如,如果目录
名为数字的话,可以将数字除以10000后的整数值做为父目录名(/data/1/13892);如果是目录名为字幕的,可以用前几个字符来做为父一级目
录(/data/ab/abcdefg)等等

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

(给Linux爱好者加星标,提升Linux技能

【导读】:单台 Linux 服务器可以支撑多少个 TCP 连接? 关于这个问题,我想很多客户端的同学都不怎么了解,甚至于很多服务器开发也没有特意的关注。


那么这个承载数到底取决了什么,是端口数量,还是内存大小,亦或者是可创建文件句柄数量?让我们一起来了解下吧。

困惑很多人的并发问题

在网络开发中,我发现有很多同学对一个基础问题始终是没有彻底搞明白。那就是一台服务器最大究竟能支持多少个网络连接?我想我有必要单独发一篇文章来好好说一下这个问题。

很多同学看到这个问题的第一反应是65535。原因是:“听说端口号最多有65535个,那长连接就最多保持65535个了”。是这样的吗?还有的人说:“应该受TCP连接里四元组的空间大小限制,算起来是200多万亿个!”

如果你对这个问题也是理解的不够彻底,那么今天讲个故事讲给你听!

一次关于服务器端并发的聊天

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

"进程每打开一个文件(linux下一切皆文件,包括socket),都会消耗一定的内存资源。如果有不怀好心的人启动一个进程来无限的创建和打开新的文件,会让服务器崩溃。所以linux系统出于安全角度的考虑,在多个位置都限制了可打开的文件描述符的数量,包括系统级、用户级、进程级。这三个限制的含义和修改方式如下:"

  • 系统级:当前系统可打开的最大数量,通过fs.file-max参数可修改
  • 用户级:指定用户可打开的最大数量,修改/etc/security/limits.conf
  • 进程级:单个进程可打开的最大数量,通过fs.nr_open参数可修改

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

"我的接收缓存区大小是可以配置的,通过sysctl命令就可以查看。"

$ sysctl -a | grep rmem
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.rmem_default = 212992
net.core.rmem_max = 8388608

"其中在tcp_rmem"中的第一个值是为你们的TCP连接所需分配的最少字节数。该值默认是4K,最大的话8MB之多。也就是说你们有数据发送的时候我需要至少为对应的socket再分配4K内存,甚至可能更大。"

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

"TCP分配发送缓存区的大小受参数net.ipv4.tcp_wmem配置影响。"

$ sysctl -a | grep wmem
net.ipv4.tcp_wmem = 4096 65536 8388608
net.core.wmem_default = 212992
net.core.wmem_max = 8388608

"在net.ipv4.tcp_wmem"中的第一个值是发送缓存区的最小值,默认也是4K。当然了如果数据很大的话,该缓存区实际分配的也会比默认值大。"

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接


服务端百万连接达成记

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

“准备啥呢,还记得前说过Linux对最大文件对象数量有限制,所以要想完成这个实验,得在用户级、系统级、进程级等位置把这个上限加大。我们实验目的是100W,这里都设置成110W,这个很重要!因为得保证做实验的时候其它基础命令例如ps,vi等是可用的。

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

活动连接数量确实达到了100W:

$ ss -n | grep ESTAB | wc -l  
1000024

当前机器内存总共是3.9GB,其中内核Slab占用了3.2GB之多。MemFree和Buffers加起来也只剩下100多MB了:

$ cat /proc/meminfo
MemTotal:        3922956 kB
MemFree:           96652 kB
MemAvailable:       6448 kB
Buffers:           44396 kB
......
Slab:          3241244KB kB

通过slabtop命令可以查看到densty、flip、sock_inode_cache、TCP四个内核对象都分别有100W个:

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接


结语

互联网后端的业务特点之一就是高并发. 但是一台服务器最大究竟能支持多少个TCP连接,这个问题似乎却又在困惑着很多同学。希望今天过后,你能够将这个问题踩在脚下摩擦!


- EOF -


推荐阅读   点击标题可跳转

1、

2、

3、


看完本文有收获?请分享给更多人

推荐关注「Linux 爱好者」,提升Linux技能

点赞和在看就是最大的支持❤️

以上是关于linux一个文件夹内最多能放多少文件的主要内容,如果未能解决你的问题,请参考以下文章

mysql一张表最多能存多少数据

漫画:一台 Linux 服务器最多能支撑多少个 TCP 连接

一台Linux机器上最多能建立多少个TCP连接?

一台Linux机器上最多能建立多少个TCP连接?

Excel最多可以放多少行数据?

请教RAID0,1,5,10最多能使用多少硬盘