系统相关
首页 > 系统相关> > linux – 为什么打开文件的file-nr和lsof计数不同?

linux – 为什么打开文件的file-nr和lsof计数不同?

作者:互联网

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

我正在使用此命令检查它:

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计算的进程的详细信息吗?

根据下面提到的链接它说我们不能,
How to display open file descriptors but not using lsof command

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

UPDATE
对不起家伙的麻烦.我发现了我正在做的错误
我没有从root检查lsof | wc -l.这就是我看到巨大差异的原因.

仍然存在文件-nr和lsof |的输出之间的差异wc -l(来自root).
lsof count超过file -nr count.原因是,文件-nr忽略了一些目录(被lsof视为文件)我发现这个原因是谷歌本身的一项研究.
无论如何!谢谢你们所有的帮助!

解决方法:

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

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

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

The three values in
file-nr denote the number of allocated file handles, the number
of allocated but unused file handles, and the maximum number of
file handles. Linux 2.6 always reports 0 as the number of free
file handles — this is not an error, it just means that the
number of allocated file handles exactly matches the number of
used file handles.

希望这很清楚.第二个问题已经在上面提到的线程(https://serverfault.com/questions/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc-pi)中得到了回答,似乎也转向了两者

>“使用lsof”并适当过滤输出,如果您需要获得进程使用的文件描述符的良好近似值,或者
>遍历/ proc文件系统(并且仍然必须过滤输出)以便及时获取文件描述符的快照.

获得准确度量标准的难度很大,因为在任何给定点使用的FD数量在系统上可能会非常快速地波动.

以下主题建议采用’lsof’方法的过滤方案:

https://serverfault.com/questions/396872/why-or-how-does-the-number-of-open-file-descriptors-in-use-by-root-exceed-ulim

标签:linux,process,open-files
来源: https://codeday.me/bug/20190808/1625509.html