不同Linux命名空间中的共享库使用情况

时间:2012-10-18 01:28:07

标签: linux namespaces

Linux命名空间可以隔离pid,mount poing,网络等。我使用Linux命名空间来实现操作系统级虚拟机(就像vserver和LXC一样),但我经常会耗尽内存。我有一个问题,如果我在不同的命名空间中有两个进程并且它们使用相同的共享库,那么库是否会被加载一次或两次进入物理内存?此外,进程之间库共享的底层机制是什么?它是否像IPC?

1 个答案:

答案 0 :(得分:2)

如果他们都访问同一个文件,他们应该共享内存。机制非常简单;每个进程打开共享对象并mmap(2)mmap()只是为进程的地址空间中的文件提供VFS页面缓存,因此当多个进程mmap()相同的文件时,它们会获得相同的页面。

如果你有多次挂载文件系统(这是多个命名空间的挂载和挂载),那么只有一个文件系统实例 - 在VFS层处理多个挂载 - 所以它应该只有一个副本文件在缓存中。

共享库不太可能导致内存耗尽;因为它们是磁盘上文件的只读缓存,所以当内存变紧时内核会将它们逐出,当程序触及那些页面时会导致磁盘读取(例如调用函数或从库中访问内存)。