对于两个进程A和B,都使用库libc.so,libc.so只加载到内存一次。当 A 和 B 都运行在同一主机和同一 rootfs 上时,这是正常情况。
对于容器来说,如果A和B运行在不同的容器中,A和B是否共享相同的内存区域?
例如
imageA
--libc.so
--程序A
imageB
--libc.so
--程序B
we use chroot在不同的 rootfs 中运行 A 和 B。两个libc.so是相同的。 libc.so会被加载到内存两次吗?
实际上,进程 A 和 B 使用共享库 libc.socan共享相同的记忆。有点不直观的是,它取决于您使用的 Docker 存储驱动程序。如果您使用的存储驱动程序可以将共享库文件公开为源自同一设备/inode,当它们驻留在同一 docker 层时,那么它们将共享相同的虚拟内存缓存页面。当使用aufs、overlay或overlay2存储驱动程序时,您的共享库将共享内存,但当使用任何其他存储驱动程序时,它们不会共享内存。
我不确定为什么 Docker 文档中没有更明确地说明这个细节。或者也许是,但我只是错过了。如果您尝试运行密集的容器,这似乎是一个关键的区别。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)