假设多个进程正在使用同一个共享库(例如 Gtk)。据推测,它们的mmap
库文件和物理上的 RAM 是共享的?
但是,如系统监视器所示,库的大小会添加到每个进程的内存大小中,从而导致数字夸大。这准确吗?
答案1
实际的内存核算将共享内存与私有内存分开,但某些工具在显示进程内存使用情况时将它们聚合起来。另外,cgroups 会对进程使用的内存进行收费,因此如果 cgroups 中有最大内存限制,则这很重要。
这并没有夸大进程的内存使用量——它确实在使用该内存。但是,如果您查看一组进程的总内存使用情况并且仅查看组合总数,则结果将比实际使用情况夸大。尽管应该在 cgroup 中正确计算,但如果不深入研究每个进程正在使用的库,就没有简单的方法可以判断共享库被重用了多少次。
因此,如果您想了解一组进程的真实内存使用情况,并且认为将它们全部添加到同一个内存 cgroup 中是合理的,那么这应该会给您一个正确的答案。