我正在寻找一种方法来找出没有的 Ubuntu 机器下打开的 FD 限制/proc/PID/limits
,即EC2 计算机。
我一直在研究/proc/PID/limits
,并发现了具有如下值的条目FDSize
:
FDSize: 256
FDSize: 512
有什么方法可以根据这个值推断出允许打开的最大文件描述符?
答案1
不,它没有显示限制——只是显示使用情况。
>>> import resource
>>> resource.setrlimit(resource.RLIMIT_NOFILE, (10000, 10000))
>>> resource.getrlimit(resource.RLIMIT_NOFILE)
(10000, 10000)
现在:
>>> for i in range(5000):
... f=open('/tmp/delme'+str(i),'w')
... fs.append(f)
和:
laptop:/proc/20160$ cat status
...
FDSize: 8192
...
更改限制后,该值不会改变,只是在创建文件后才改变。这意味着它测量的是实际使用情况,而不是限制。
答案2
据我所知,在 Linux 上,每个进程的打开文件限制是通过命令控制的ulimit
。来自man ulimit
:
姓名 ulimit——设置或报告文件大小限制 描述 ulimit 实用程序应设置或报告文件大小写入限制 对 shell 及其子进程写入的文件施加限制(文件 任何大小的文件都可以读取。只有具有适当权限的进程 可以增加限制。
在我的系统上:
$ ulimit -aS | grep "open files"
open files (-n) 1024
$ ulimit -aH | grep "open files"
open files (-n) 1024
系统范围的限制存储在/proc/sys/fs/文件最大值
$ cat /proc/sys/fs/file-max
305018
这Linux HTTP 基准测试有关调整 Linux 上的文件描述符限制的部分有更多信息。
我不太清楚这是否正是您要找的内容。这回答了您的问题吗?
答案3
来自 man proc,“* FDSize:当前分配的文件描述符槽数量。”,这是进程的文件描述符表中“struct file”的数量。