挂载4000次后挂载缓慢

挂载4000次后挂载缓慢

我需要为各种 chroot 创建大约 10,000 个总共绑定安装。在大约 3000-4000 次挂载后,它会显着减慢,从 100/s 降至大约 5-10/s。我假设它遇到了内核中可能的分配的一些奇怪的内部限制,并且内核必须为每个安装扩展它们。是否有已知的 sysctl 设置可以提前提高这一点?

答案1

沿着命名空间的思路思考,您可能可以减少所需的安装数量。您将它们用于 chroot 环境,所以我猜您正在为每个环境进行多次安装。

通过创建一个模板环境并将应用程序安装到其自己的命名空间内,您也许可以降低这一点。

维基百科 Linux 命名空间:

Linux 命名空间起源于 2002 年的 2.4.19 内核

在命名空间内,您可以创建不被其他进程共享的挂载。因此,您可以启动一个新的命名空间,将一个应用程序绑定安装到您的 chroot 环境中,然后 chroot 到其中。没有其他应用程序能够看到最后的安装。

假设您知道每个环境都需要/etc /dev /proc /sys /tmp /bin.您可以创建一个模板/chroot_env

# bind mount
/chroot_env
/chroot_env/etc
/chroot_env/dev
/chroot_env/proc
/chroot_env/sys
/chroot_env/tmp
/chroot_env/bin
# With empty directories
/chroot_env/opt
/chroot_env/opt/app

然后,在您实际致电之前,chroot您可以:

# Start a new shell in a new namespace
unshare --mount
mount --bind /opt/my_app /chroot_env/opt/app

# run the app as a chroot
chroot /chroot_env /opt/my_app

请注意,要在脚本中执行此操作,您可能需要执行以下操作:

unshare --mount sh -c 'mount --bind /opt/my_app /chroot_env/opt/app && chroot /chroot_env /opt/my_app/run'

这意味着您只需为每个应用程序安装一次(到/opt/app),而不是为每个环境安装一次,而不是 6 个(?)。

相关内容