为什么无法在 Solaris 11 中启动超过 1000 个进程?

为什么无法在 Solaris 11 中启动超过 1000 个进程?

我试图启动 1000 多个进程,但它在 999 处挂起了。

例如

#!/usr/bin/env zsh
for i in {1..$1} ; do
  sleep 300 &
done

然后运行它,

$ ./launchsleep.sh 3000                                                                         
./launchsleep.sh:4: job table full

答案1

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

答案2

事实证明,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 &

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

相关内容