fork:retry:资源暂时不可用

use*_*391 77 linux fork intel mpi

我尝试在我的计算机上安装英特尔MPI基准测试,我收到此错误:

fork: retry: Resource temporarily unavailable
Run Code Online (Sandbox Code Playgroud)

然后,当我跑步lstop命令时,我再次收到此错误.

导致此错误的原因是什么?

配置我的机器:

Dell precision T7500
Scientific Linux release 6.2 (Carbon)
Run Code Online (Sandbox Code Playgroud)

Sat*_*ish 78

这通常是由于文件描述符用完而导致的.

系统总文件描述符限制,您从命令中获得什么:

sysctl fs.file-nr
Run Code Online (Sandbox Code Playgroud)

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

<in_use> <unused_but_allocated> <maximum>
Run Code Online (Sandbox Code Playgroud)

要查明用户文件描述符限制是什么,请执行以下命令:

sudo su - <username>
ulimit -Hn
Run Code Online (Sandbox Code Playgroud)

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

sudo lsof -u <username> 2>/dev/null | wc -l
Run Code Online (Sandbox Code Playgroud)

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

fs.file-max = 204708
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,您可以使用"sysctl -p"在/etc/sysctl.conf中应用当前设置,以保存重启. (15认同)
  • 此外,如果您只读/ etc,则可以在运行时使用"sysctl -w fs.file-max = 204708". (2认同)

Wil*_*ler 48

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

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

观察在给定Java进程ID内运行的Linux本机线程的持续数量.在达到大约1,000(对我们 - YMMV)之后,我们开始收到您提到的错误消息.

  • 当我测试时,`ps -eL`用于显示所有进程,而'ps -L <pid>`用于显示有关`<pid>`的进程.`ps -eL <pid>`只显示所有进程而不管`<pid>`. (2认同)
  • 虽然1000线程不是很多 (2认同)