打开文件句柄

打开文件句柄

当我在循环中生成多个进程时,我达到了打开文件句柄的最大数量,并且 for 循环中断。

当我使用打开的文件句柄进行计数时,lsof我得到:

$ lsof | wc -l
1464377

但是检查fs.file-nr返回:

$ sysctl fs.file-nr
fs.file-nr = 35328      0       6553201

我预计第一个数字是 1464377。

我有一些问题:

  1. lsof (1464377) 和 file-nr (35328) 的输出有什么区别?

  2. 最大值似乎是 6553201,这看起来相当随意。这个数字的最大值是多少?

答案1

按照man lsof

打开的文件可以是常规文件、目录、块特殊文件、字符特殊文件、执行文本引用、库、流或网络文件(Internet 套接字、NFS 文件或 UNIX 域套接字)。可以通过路径选择文件或文件系统中的所有文件。

因此,输入的行数lsof可能比实际的文件描述符多得多。

请参阅此相关问题:https://serverfault.com/questions/485262/number-of-file-descriptors- Different- Between-proc-sys-fs-file-nr-and-proc-pi

答案2

@Archemar 是对的。我迟到了。我检查了一下(排除字符特殊文件、网络文件、目录...):

$ lsof /|grep -v DIR|wc -l 
1191

$ sysctl fs.file-nr
fs.file-nr = 1280   0   98018

1191打开的文件和1280分配的句柄。数值非常接近。

关于 sysctl 上的 fs 分区的内核文档

相关内容