1

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

4

1 回答 1

4

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

当您多次挂载一个文件系统时(这就是绑定挂载和来自多个命名空间的挂载所做的事情),只有一个文件系统实例——多个挂载在 VFS 层处理——所以它应该只有一个文件副本缓存。

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

于 2012-12-01T20:41:49.043 回答