/bin/bash:运行 Chrome 时 Docker 中的资源暂时不可用

/bin/bash:运行 Chrome 时 Docker 中的资源暂时不可用

我有一个运行 Redhat 的 Docker 容器:

Red Hat Enterprise Linux Server release 6.2 (Santiago)

主机操作系统是 Linux Mint:

Linux Mint 19 Tara

当我在其中运行某些命令并且 Chrome 在主机上运行时,我得到:

bash-4.1# su www
su: /bin/bash: Resource temporarily unavailable

当我关闭主机上的 Chrome 时,命令按预期工作。

我的想法是,我遇到了某种资源问题,但我不确定要查找哪里——哪种资源以及问题是出在 Docker 容器上的操作系统还是主机操作系统中?

我认为它可能是打开的文件:

$ lsof | wc -l <-- With Chrome
311424
$ lsof | wc -l <-- Without Chrome
181608

但是主机上的最大文件数远高于 Chrome 运行时的打开文件数:

$ cat /proc/sys/fs/file-max
3264936

内存似乎也不是问题:

$ free -g <-- With Chrome
              total        used        free      shared  buff/cache   available
Mem:             31           8           5           2          17          19
Swap:             1           0           1

$ free -g <-- Without Chrome
              total        used        free      shared  buff/cache   available
Mem:             31          11           2           2          17          16
Swap:             1           0           1

我还应该去哪里寻找?

更新

baelx 有正确的答案,但还有一些额外的资源可能会在将来帮助其他人。

本文提供了一些有关查找每个用户正在运行的进程数量的有用信息。

$ ps h -Led -o user | sort | uniq -c | sort -n

还需要注意的是,nproc 命令与 nproc.conf 文件无关。

本文介绍了主机用户 ID 如何映射到容器用户 ID。就我而言,主机上的用户的用户 ID 为 1000。主机上的 www 用户的用户 ID 也是 1000。由于 Chrome 在用户 ID 为 1000(jbodnar)的主机上打开了 1600 多个进程,因此容器无法为用户 ID 1000(www)打开另一个进程。

答案1

您可能已经达到了系统的最大 PID 或 ulimit。您可以使用以下命令查看总共运行了多少个进程:

ps -eLf | wc -l

如果上述结果是 32,000,则将 kernel.pid_max 增加到 65,534。请注意,只有 64 位系统才支持此增加。您可以使用以下命令sysctl实现此目的:

sysctl -w  kernel.pid_max=65534

此时尝试su再次运行该命令。如果不起作用,请查看 Chrome 的运行进程数:

ps -eLf | grep chrome | wc -l

然后,您可以尝试修改 Chrome 的 nproc 号码- 尽管这可能需要通过RHEL 6 来/etc/security/limits.conf完成。/etc/security/limits.d/90-nproc.conf

每个文件都应使用相同的语法来描述打开的进程数量。您可以尝试将 Chrome 的值从 1024 更改为 2048(如果问题需要,可能更大)。您还可以尝试为所有用户调整此值(用星号表示):

<user>       -          nproc     2048      <<<----[ Only for "<user>" user ]
  *          -          nproc     2048      <<<----[ For all user's ]

来源

(如果您在那里没有账户,我建议您去那里,因为那里有很多很好的教育和支持材料。)

相关内容