从进程内部监视 UNIX 资源



我有一堆 EAGAIN 试图 fork() 或生成线程,这让我相信我在某处泄漏了资源。

在 POSIX 中,是否有可能从流程本身内部获取以下内容:

  • 活动线程数
  • 活动子进程数
  • 活动管道数
  • 活动套接字的数量(或者也许这个和管道将计为文件描述符?

还是这些必须手动计算?他们已经有计数器了,但我认为其中一个正在泄漏。

我猜你正在再次获得 E,因为你达到了资源限制。 可以运行的线程/进程数存在系统限制。 您可以通过以下方式查看它

cat /proc/sys/kernel/threads-max

并更改它

echo 100000 > /proc/sys/kernel/threads-max

分别。 您更有可能达到进程的用户限制。 您应该阅读手册页并在 getrlimitulimit 上进行搜索。 SO上有很多关于这些的信息。

假设您正在从一个父级生成所有这些过程,那么跟踪它们应该很容易。 在fork() 之前递增父级中的计数器。 如果子项正在生成子项,那么它会变得更加复杂,您需要使用共享内存或其他一些 IPC 机制。 在任何情况下,您都可以使用wait()waitpid()系统调用来确定子项的状态,并在此基础上递减进程计数器。 wait返回的状态数据将告诉您每个子项的终止处置。 同样,如果您遇到麻烦,SO上有很多问题会对此进行相当详细的讨论。

为了回答您的主要问题,有一些方法可以查询系统(通常通过/proc)以获取您关注的某些资源。 如果您担心自己的资源,这几乎总是错误的方式。 您完全有能力自己跟踪它们 - 而且效率要高得多。

祝你好运。 希望这能为您指明正确的方向。

相关内容

  • 没有找到相关文章

最新更新