您可以从/proc/<pid>/smaps
文件中以Pss
条目的形式(“比例共享大小”的缩写)形式获得有关此类信息。
在上面的示例中,两个进程之间“共享”了200MB,每个进程将在该映射的PSS条目中显示100MB,即,内存在共享该进程的进程之间平均分配(直到其中一个进程复制并取消共享)。
以下是运行类似您发布的内容的摘录:
$ top
...
30986 me 20 0 790m 769m 2200 S 0 4.8 0:00.48 python3.2
30987 me 20 0 790m 767m 224 S 0 4.8 0:00.00 python3.2
$ cat /proc/30986/smaps
...
0119a000-015b7000 rw-p 00000000 00:00 0 [heap]
Size: 4212 kB
Rss: 3924 kB
Pss: 1992 kB
...
7fa06b020000-7fa09ab11000 rw-p 00000000 00:00 0
Size: 781252 kB
Rss: 781252 kB
Pss: 390626 kB
...
7fff8e45a000-7fff8e489000 rw-p 00000000 00:00 0 [stack]
Size: 192 kB
Rss: 160 kB
Pss: 82 kB
...
(这些文件中包含很多内容,包括可能在许多进程之间共享的共享库的映射,因此每个进程在它们的PSS条目中仅占一小部分。)
这是一篇不错的文章:ELC:应用程序真正使用了多少内存?
我不知道用于显示此信息的通用的类似顶部的工具,而且ps
不幸的是,我不认为可以显示任何信息。本文指出了一个pagemap
由Matt Mackall 调用的带有python脚本的存储库,您可以使用或改编它。
无耻的插件:如果您对此感兴趣,可以在Unix&Linux上找到一些有关PSS和smaps
文件的文章。