假設多個進程正在使用同一個共享庫(例如 Gtk)。據推測,它們的mmap
庫文件和物理上的 RAM 是共享的?
但是,如係統監視器所示,庫的大小會添加到每個進程的記憶體大小中,導致數字誇大。這樣準確嗎?
答案1
實際的記憶體核算將共享記憶體與私有記憶體分開,但某些工具在顯示進程記憶體使用情況時將它們聚合起來。另外,cgroups 會對進程使用的記憶體進行收費,因此如果 cgroups 中有最大記憶體限制,則這很重要。
這並沒有誇大進程的記憶體使用量——它確實在使用該記憶體。但是,如果您查看一組進程的總記憶體使用情況並且僅查看組合總數,則結果將比實際使用情況誇大。儘管應該在 cgroup 中正確計算,但如果不深入研究每個進程正在使用的庫,就沒有簡單的方法可以判斷共享庫被重複使用了多少次。
因此,如果您想了解一組進程的真實記憶體使用情況,並且認為將它們全部添加到同一個記憶體 cgroup 中是合理的,那麼這應該會給您一個正確的答案。