【问题标题】:linux. many file descriptors when call sys_clone [closed]linux。调用 sys_clone 时的许多文件描述符 [关闭]
【发布时间】:2019-02-06 14:42:48
【问题描述】:

我使用带有标志 SIGCHLD 的克隆创建 400 个线程 |克隆_FS |克隆文件 |克隆_SIGHAND | CLONE_VM

和$ losf | wc -l 运行后显示 600 000 个打开的描述符

我需要做什么?

【问题讨论】:

  • 使用clone而不是fork有什么特别的原因吗?此外,我们不知道您需要做什么。就像在爱丽丝梦游仙境中一样:“请你告诉我,我应该从这里走哪条路?” “-这很大程度上取决于你想去哪里”
  • 400 个线程似乎真的太多了。为什么需要这么多?这似乎是一个调度开销的噩梦。

标签: c++ linux clone


【解决方案1】:

如果您使用的是CLONE_FILES,您可能不需要做任何事情。

lsof 显示每个线程持有的文件描述符的总和,即使这些不同的线程在后端共享一组文件描述符。因此,如果您有 1000 个线程和 100 个文件描述符共享,那么如果您只检查 lsof,它将看起来打开了 100,000 个文件描述符。

检查/proc/sys/fs/file-nr 以查看系统已打开的文件描述符的实际数量。

至于是否存在可以确定唯一文件描述符列表以及打开哪些进程/线程的工具,我不确定。我自己从来不需要这样做,但这似乎是一个尚未有人解决的问题。

【讨论】:

  • 是的,它创建了许多描述符。但进程限制为 100 万。我不能创建超过 5000 个线程
  • 您是否遇到了系统限制?在终端中运行ulimit -a,看看是否有限制?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-20
  • 2017-08-22
  • 2017-09-05
  • 2011-04-10
  • 2021-03-12
  • 2015-07-04
相关资源
最近更新 更多