当我在循环中生成多个进程时,我达到了打开文件句柄的最大数量,并且 for 循环中断。
当我使用打开的文件句柄进行计数时,lsof
我得到:
$ lsof | wc -l
1464377
但是检查fs.file-nr
返回:
$ sysctl fs.file-nr
fs.file-nr = 35328 0 6553201
我预计第一个数字是 1464377。
我有一些问题:
lsof (1464377) 和 file-nr (35328) 的输出有什么区别?
最大值似乎是 6553201,这看起来相当随意。这个数字的最大值是多少?
答案1
按照man lsof
打开的文件可以是常规文件、目录、块特殊文件、字符特殊文件、执行文本引用、库、流或网络文件(Internet 套接字、NFS 文件或 UNIX 域套接字)。可以通过路径选择文件或文件系统中的所有文件。
因此,输入的行数lsof
可能比实际的文件描述符多得多。
答案2
@Archemar 是对的。我迟到了。我检查了一下(排除字符特殊文件、网络文件、目录...):
$ lsof /|grep -v DIR|wc -l
1191
$ sysctl fs.file-nr
fs.file-nr = 1280 0 98018
有1191
打开的文件和1280
分配的句柄。数值非常接近。