为什么 Linux 中打开文件的数量受到限制?

为什么 Linux 中打开文件的数量受到限制?

现在,我知道如何:

  • 查找每个进程的打开文件限制:ulimit -n
  • 统计所有进程打开的文件数:lsof | wc -l
  • 获取允许的最大打开文件数:cat /proc/sys/fs/file-max

我的问题是:为什么Linux中有打开文件的限制?

答案1

原因是操作系统需要内存来管理每个打开的文件,而内存是有限的资源 - 特别是在嵌入式系统上。

ulimit -n作为 root 用户,您可以更改每个进程(通过)和每个系统(例如)的最大打开文件数echo 800000 > /proc/sys/fs/file-max

答案2

请注意,lsof | wc -l总结了很多重复的条目(分叉进程可以共享文件句柄等)。该数字可能远高于 中设定的限制/proc/sys/fs/file-max

要从 Linux 内核的角度获取当前打开的文件数,请执行以下操作:

cat /proc/sys/fs/file-nr

示例:该服务器最多有 65536 个打开文件,其中有 40096 个,尽管 lsof 报告的数字要大得多:

# cat /proc/sys/fs/file-max
65536
# cat /proc/sys/fs/file-nr 
40096   0       65536
# lsof | wc -l
521504

答案3

我认为这主要是出于历史原因。

Unix 文件描述符是一个小值,由和int等函数返回,并传递给、、等。opencreatreadwriteclose

至少在 Unix 的早期版本中,文件描述符只是固定大小的每进程结构数组的索引,其中每个结构都包含有关打开文件的信息。如果我没记错的话,一些早期的系统将该表的大小限制为 20 左右。

更现代的系统有更高的限制,但保留了相同的总体方案,很大程度上是出于惯性。

相关内容