我最近遇到了一个Linux进程,它“泄漏”了文件描述符:它打开了文件描述符,但没有正确地关闭其中一些描述符。
如果我监测到了这一点,我可以提前知道这个过程正在达到它的极限。
在Ubuntu Linux系统中,有没有一种很好的、Bash或Python的方法来检查给定进程的FD使用率?
编辑:
我现在知道如何检查有多少打开的文件描述符;我只需要知道一个进程允许多少个文件描述符。有些系统(如亚马逊EC2)没有/proc/pid/limits
文件。
发布于 2009-08-31 12:34:14
对/proc/<pid>/fd/
中的条目进行计数。适用于该进程的硬限制和软限制可在/proc/<pid>/limits
中找到。
发布于 2009-09-06 00:45:51
Linux内核提供的获取资源限制的唯一接口是getrlimit()
和/proc//limits
。getrlimit()
只能获取调用进程的资源限制。/proc/
pid/limits
允许您获取具有相同用户id的任何进程的资源限制,并且在RHEL5.2、RHEL4.7、Ubuntu9.04以及带有2.6.24或更高版本内核的任何发行版上都可用。
如果您需要支持较旧的Linux系统,那么您必须让进程本身调用getrlimit()
。当然,要做到这一点,最简单的方法是修改程序或它使用的库。如果您正在运行该程序,则可以使用LD_PRELOAD
将您自己的代码加载到该程序中。如果这些都不可能,那么您可以使用gdb附加到进程,并让它在进程内执行调用。你也可以自己做同样的事情,使用ptrace()
附加到进程,将调用插入到它的内存中,等等,但是这是非常复杂的,不推荐这样做。
有了适当的权限,其他方法将涉及查看内核内存、加载内核模块或以其他方式修改内核,但我假设这些都是不可能的。
发布于 2009-08-31 09:41:29
您可以尝试编写对给定pid定期调用lsof -p {PID}
的脚本。
https://stackoverflow.com/questions/1356675
复制相似问题