为什么我不能在 Solaris 11 中启动超过 1000 个进程?

Tim*_*ast 3 solaris

我正在尝试启动 1000 多个进程,但它挂在 999 处。

例如

#!/usr/bin/env zsh
for i in {1..$1} ; do
  sleep 300 &
done
Run Code Online (Sandbox Code Playgroud)

然后运行它,

$ ./launchsleep.sh 3000                                                                         
./launchsleep.sh:4: job table full
Run Code Online (Sandbox Code Playgroud)

use*_*517 7

ulimit -u设置可能在这里起作用。


Tim*_*ast 5

事实证明,zsh(和大多数其他 shell)有一个最大大小的作业表。该表跟踪后台进程,当它填满时,您不能再启动任何后台进程。

我的解决方法是更改​​我的脚本以启动守护进程而不是一堆后台进程。

例如

launch.sh:
#!/usr/bin/env zsh
for i in {1..$1} ; do
  ./dosleep.sh
done

dosleep.sh:
#!/usr/bin/env zsh
nohup sleep 300 &
Run Code Online (Sandbox Code Playgroud)

此外,正如@Iain 所提到的,Solaris 对用户可以启动的进程数有限制 (ulimit -u)。在 Solaris 11 中,要增加此限制,请编辑 /etc/project 并增加 project.max-processes。