我正在寻找一个可以监视某个进程是否接近最大打开文件数限制的工具。
答案1
lsof -p process-id
来自手册页
Lsof 在其标准输出文件中列出有关进程打开的文件的信息
[...]
-ps 此选项排除或选择文件列表 可选进程标识 (PID) 号的进程 在逗号分隔的集合中 - 例如“123”或 “123,^456”。 (集合中不应有空格。) 以“^”(否定)开头的 PID 编号代表独有的 sions。 多个进程 ID 号合并到一个“或”集合中 参与 AND 选项选择之前。然而,PID 排除项无需进行 OR 或 AND 运算即可应用并生效 在应用其他选择标准之前。
[...]
+|-r [t[m]] 此选项将 lsof 置于重复模式。lsof 列出打开的 其他选项选择的文件,延迟 t 秒(默认 十五),然后重复列出,延迟和列出 重复,直到由预先定义的条件停止 修复该选项。 如果前缀是“-”,则重复模式是无限的。lsof 必须是 以中断或退出信号终止。 如果前缀是“+”,重复模式将结束第一个循环 列出打开的文件
答案2
以 root 身份运行此命令将为您提供打开文件数最多的进程所打开的文件数。由于它实际上并不遵循 proc 树中的链接,因此它的移动速度比 lsof 快得多,并且涵盖了机器上每个正在运行的进程。但是,它确实需要以 root 身份运行。
find /proc/*/fd -type l -print | awk -F/ '{print $3}' | sort | uniq -c | sort -n | tail -1