xan*_*eng 158 limit open-files
现在,我知道如何:
ulimit -n
lsof | wc -l
cat /proc/sys/fs/file-max
我的问题是:为什么在 Linux 中有打开文件的限制?
jof*_*fel 97
原因是操作系统需要内存来管理每个打开的文件,而内存是一种有限的资源——尤其是在嵌入式系统上。
作为 root 用户,您可以更改每个进程(通过ulimit -n
)和每个系统(例如echo 800000 > /proc/sys/fs/file-max
)的最大打开文件数。
gre*_*eke 79
请注意,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
Run Code Online (Sandbox Code Playgroud)
Kei*_*son 21
我认为这主要是出于历史原因。
Unix 文件描述符是一个小int
值,由open
和等函数返回creat
,并传递给read
、write
、close
等。
至少在 Unix 的早期版本中,文件描述符只是一个固定大小的每进程结构数组的索引,其中每个结构都包含有关打开文件的信息。如果我没记错的话,一些早期的系统将这个表的大小限制在 20 左右。
更现代的系统有更高的限制,但保持了相同的总体方案,主要是出于惯性。