我正在尝试通过单独的守护进程创建 4000 多个 docker 容器(以避免每个桥 1023 个 veth 的障碍)。但我越来越
bash:fork:无法分配内存
错误在1800左右。我增加了系统范围的资源(ulimit
),并且还剩下大量的inode和内存。 Docker 版本 1.8 RedHat 版本 7
答案1
bash 不使用vfork
并且 bash 很大。
这会导致许多分叉消耗大量虚拟内存。
这很可能是由系统上的实际内存资源引起的问题,而不是由您可以通过 控制的东西引起的ulimit
。
您是否尝试过使用 Bourne Shell 或 ksh93?两者都用于vfork()
优化性能。
答案2
问题在于 docker 僵尸进程正在消耗内核进程容量,可以通过增加 kernel.pid_max 来解决该问题