2012-10-18 55 views
1

Linux命名空間可以隔離pid,掛載,網絡等。我使用Linux命名空間來實現OS級虛擬機(就像vserver和LXC一樣),但我經常用完內存。我有一個問題,如果我在不同的命名空間中有兩個進程並且它們使用同一個共享庫,那麼這個庫會被加載一次還是兩次到物理內存?另外,進程間共享庫的底層機制是什麼?它是否像IPC?在不同的Linux命名空間中使用共享庫

回答

1

如果他們都訪問同一個文件,他們應該共享內存。該機制非常簡單;每個進程打開共享對象和它。 mmap()只是爲進程的地址空間中的文件提供VFS頁面緩存,所以當多個進程mmap()相同的文件時,它們會獲得相同的頁面。

當你有一個文件系統安裝多次(這是綁定多個名稱空間中的坐騎和坐騎做),只有一個文件系統實例—多個坐騎在VFS層—處理,所以它應該有隻有一個副本緩存中的每個文件。

共享庫不太可能導致內存耗盡;由於它們是磁盤上文件的只讀緩存,當內存變得緊張時,內核將驅逐它們,從而在程序觸及這些頁面時(例如調用函數或從庫訪問內存)讀取磁盤。