Vas*_*K V 23 linux process open-files
我突然遇到了一个问题;我所有的应用程序和服务器都运行良好,突然间我看到打开的文件数量猛增。
我正在用这个命令检查它:
cat /proc/sys/fs/file-nr
Run Code Online (Sandbox Code Playgroud)
当我检查它时44544 0 128000
,它显示,所以 44544 是打开文件的数量。
但是当我检查这个命令时 -lsof | wc -l
它显示 - 28384。
那么哪个是正确的呢?
我的最大打开文件限制是 65535
ulimit -a
open files (-n) 65535
Run Code Online (Sandbox Code Playgroud)
我想知道使用更多打开文件的前 5 个进程。我可以从中得到这个,lsof
但这里显示的计数与我上面提到的其他命令有很大不同。
我可以获得此命令计数的进程的详细信息cat /proc/sys/fs/file-nr
吗?
根据下面提到的链接,它说我们不能, 如何显示打开的文件描述符但不使用 lsof 命令
有没有适合我的工作?我需要找到哪个进程突然开始使用更多打开的文件。
更新 抱歉各位麻烦。我发现我正在做的错误是我没有从 root 中检查 lsof|wc -l。这就是我看到巨大差异的原因。
file -nr 和 lsof 的输出之间仍然存在差异 | wc -l(从根)。lsof 计数大于文件 -nr 计数。这样做的原因是,文件 -nr 忽略了一些目录(被 lsof 视为文件)我通过对谷歌本身的一些研究发现了这个原因。无论如何!感谢大家的帮助!
Tho*_*s N 13
这里似乎有两个问题在起作用。首先,可以在以下位置找到 file-nr 和 file-max 结构的完整文档
https://www.kernel.org/doc/Documentation/sysctl/fs.txt
这将文件中的字段定义为:
file-nr 中的三个值分别表示已分配的文件句柄数、已分配但未使用的文件句柄数和最大文件句柄数。Linux 2.6 总是报告 0 作为空闲文件句柄的数量——这不是错误,它只是意味着分配的文件句柄数量与使用的文件句柄数量完全匹配。
希望这已经足够清楚了。第二个问题已在上面提到的线程中得到回答(https://serverfault.com/questions/485262/number-of-file-descriptors-different-between-proc-sys-fs-file-nr-and-proc- pi)并且似乎转变为
为此获得准确度量的难度很大,因为在任何给定点使用的 FD 数量在系统上可能会非常迅速地波动。
以下线程建议了“lsof”方法的过滤方案: