fork:重试:资源暂时不可用


80

我尝试在计算机上安装Intel MPI Benchmark,但出现此错误:

fork: retry: Resource temporarily unavailable

然后,我又收到此错误,当我跑lstop命令。

是什么导致此错误?

我的机器配置:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)

查看有关如何增加进程数的Linux文档。
theglauber

2
或许,这将有助于: stackoverflow.com/questions/344203/...
theglauber

Answers:


82

这通常是由文件描述符用尽引起的。

有系统文件描述符总数限制,您可以从命令中得到什么:

sysctl fs.file-nr

这将返回文件描述符的计数:

<in_use> <unused_but_allocated> <maximum>

要找出用户文件描述符限制是多少,请运行以下命令:

sudo su - <username>
ulimit -Hn

要查找用户正在使用多少个文​​件描述符,请运行以下命令:

sudo lsof -u <username> 2>/dev/null | wc -l

因此,现在如果遇到系统文件描述符限制问题,则需要编辑/etc/sysctl.conf文件并添加或修改它已经存在的fs.file-max行并将其设置为大值足以处理所需数量的文件描述符并重新启动。

fs.file-max = 204708

15
仅供参考,您可以使用“ sysctl -p”在/etc/sysctl.conf中应用当前设置,以免重新引导。
EmmEff 2014年

2
另外,如果您仅读/ etc,则可以在运行时使用'sysctl -w fs.file-max = 204708'。
OndrejGalbavý15年

您也可以直接将其添加到内核无需重新启动,但并不是永久“回声999999>的/ proc / SYS / FS /文件-MAX”
马特森kepson

50

另一种可能性是线程过多。针对使用线程池的应用程序运行测试工具时,我们只是遇到了此错误消息。我们用了

watch -n 5 -d "ps -eL <java_pid> | wc -l"

监视在给定的Java进程ID中运行的Linux本机线程的持续计数。在此命中约1,000(对我们来说是YMMV)之后,我们开始收到您提到的错误消息。


2
当我测试时,ps -eL致力于显示所有过程,并ps -L <pid>致力于显示有关的过程<pid>ps -eL <pid>只是显示所有过程,而与无关<pid>
Sanghyun Lee

1
@Willie Wheeler,您做了些什么来克服线程限制?我一直在搜索和测试DAYS在网上找到的众多解决方案,但无济于事。除了重新启动systemd-logind为止,什么都不会允许超过1k线程,该重新启动持续了大约一个小时,然后错误才再次开始!
布兰登·埃利奥特

机器具有有限的资源。如果达到极限,则使用更少的线程(例如,通过线程池控制)或更多的机器。

我重新启动了Rails服务器
thedanotto

2
1000个线程虽然不是很多
弗兰克斯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.