检查Linux中给定进程的开放fd限制

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (269)

我最近有一个Linux进程,它“泄漏”了文件描述符:它打开了它们,没有正确关闭其中的一些。

如果我对此进行了监测,我可以事先看出,这一进程已接近极限。

是否有一种很好的、Bash\Python方法来检查UbuntuLinux系统中给定进程的FD使用率?

我现在知道如何检查有多少打开的文件描述符;我只需要知道一个进程允许多少个文件描述符...。有些系统(如AmazonEC 2)没有/proc/pid/limits档案。

谢谢

提问于
用户回答回答于

将条目数在/proc/<pid>/fd/...。适用于该过程的硬限制和软限制可在/proc/<pid>/limits...

用户回答回答于

Linux内核提供的获取资源限制的唯一接口是getrlimit()/proc/PID/limits...getrlimit()只能获得调用进程的资源限制。/proc/PID/limits允许获得具有相同用户id的任何进程的资源限制,并且可以在RHEL 5.2、RHEL 4.7、Ubuntu 9.04以及2.6.24或更高版本的任何发行版上使用。

如果需要支持旧的linux系统,那么必须让进程本身调用。getrlimit(). 将自己的代码加载到程序中。如果这些都不可能,那么可以使用gdb附加到进程,并让它在进程中执行调用。你也可以自己做同样的事ptrace()若要附加到进程,请将调用插入到其内存中,等等,但是这是非常复杂的,因此不建议使用。

使用适当的权限,其他方法将涉及查看内核内存、加载内核模块或以其他方式修改内核,但我假设这些都是不可能的。

扫码关注云+社区

领取腾讯云代金券