/proc/PID/status 中 FDSize 的含义

/proc/PID/status 中 FDSize 的含义

我正在寻找一种方法来找出没有的 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”的数量。

相关内容