为什么打开文件中的file-nr和lsof计数不同?[关闭]


19

我突然遇到一个问题。我所有的应用程序和服务器运行正常,突然间我看到打开的文件数量激增。

我正在使用以下命令进行检查:

cat /proc/sys/fs/file-nr

当我检查时显示为44544 0 128000,因此44544是打开的文件数。

但是当我使用此命令检查时- lsof | wc -l 它显示-28384。

那么哪一个是正确的呢?

我的最大打开文件数限制是65535

ulimit -a
open files                      (-n) 65535

我想知道使用更多打开文件的前5个过程。我可以从中得到,lsof但是这里显示的计数与我上面提到的其他命令有很大不同。

我可以获取此命令计数的进程的详细信息cat /proc/sys/fs/file-nr吗?

根据下面提到的链接,它说我们不能, 如何显示打开的文件描述符,但不使用lsof命令

我周围有工作吗?我需要突然发现哪个进程开始使用更多打开的文件。

更新 抱歉麻烦你们了。我发现我正在做的错误是我没有从根目录检查lsof | wc -l。这就是我看到巨大差异的原因。

在文件-nr和lsof |的输出之间仍然存在差异。wc -l(从根目录开始)。lsof计数大于文件-nr计数。原因是,file -nr忽略了某些目录(lsof将其视为文件),这是我根据对Google本身的一番研究发现的。无论如何!谢谢大家的帮助!



难道lsof | wc -l 真的呈现负数?
乔·塞维尔

3
那不是负号,是连字符!
Vasanth Nag KV

Answers:


8

这里似乎有两个问题。首先,可以在以下位置找到关于file-nr和file-max结构的完整文档

https://www.kernel.org/doc/Documentation/sysctl/fs.txt

这会将文件中的字段定义为:

file-nr中的三个值表示已分配的文件句柄数,已分配但未使用的文件句柄数以及最大文件句柄数。Linux 2.6始终将0表示为空闲文件句柄数-这不是错误,这仅表示分配的文件句柄数与使用的文件句柄数完全匹配。

希望这已经足够清楚了。第二个问题已在上述线程中得到解答(/server/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi),并且似乎转移到了

  1. 如果您需要一个进程使用的文件描述符的一个很好的近似值,请“使用lsof”并适当地过滤输出
  2. 遍历/ proc文件系统(并且仍然必须过滤输出),以便在使用文件描述符时获得快照。

为此,获取准确度量标准的难度很大,因为在任何给定点使用的FD数量在系统上都会非常迅速地波动。

以下线程为“ lsof”方法提出了一种过滤方案:

/server/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim


更新了我的问题。但感谢您提供的所有信息。
Vasanth Nag KV

但是,怎么可能比ulimit我说我最多可以打开1024个文件(如果lsof | wc -l说我已经有1545个文件)呢?
Nakilon '17

请阅读手册页lsofulimit为回答你的问题。
Thomas N
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.