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’方法的过滤方案:
标签:linux,process,open-files 来源: https://codeday.me/bug/20190808/1625509.html