加入收藏 | 设为首页 | 会员中心 | 我要投稿 大连站长网 (https://www.0411zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux – 如何衡量一组分叉进程的内存占用量?

发布时间:2021-05-16 11:14:41 所属栏目:Linux 来源:网络整理
导读:假设我有一个使用200MB内存的进程,而fork()s: python -c "import os; data='x'*200000000; os.fork(); raw_input()" 像’top’这样的程序会显示每个进程使用200MB,SHRd内存非常少,所以看起来这些进程总共使用了400MB.但是,因为fork()为进程的内存页面实现

假设我有一个使用200MB内存的进程,而fork()s:

python -c "import os; data='x'*200000000; os.fork(); raw_input()"

像’top’这样的程序会显示每个进程使用200MB,SHRd内存非常少,所以看起来这些进程总共使用了400MB.但是,因为fork()为进程的内存页面实现了写时复制(COW),实际情况是这些进程总共只使用了200MB.

为什么不顶部显示COW的内存部分?有没有办法让它这样做?或者我可以使用另一个命令吗?

注意:OSX上的“顶部”似乎有一个RSHRD列,可以达到我的预期.我的问题是Linux.

解决方法

您可以从Pss条目形式的每个进程的/ proc /< pid> / smaps文件中获取该类信息(“比例共享大小”的缩写).

在以上两个进程之间具有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:How much memory are applications really using?

我不知道有一个常见的顶级工具来显示这些信息,我不认为ps有可能显示不幸的选项.文章指出了一个由Matt Mackall提供的名为pagemap的python脚本的存储库,你可以使用或改编它.

无耻的插件:你会在Unix & Linux找到一些关于PSS和smaps文件的帖子,如果你对此感兴趣的话.

(编辑:大连站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!