我怎样才能找出在Linux上进程COMMCOM的内存量?

为了防止OOM杀手运行,我设置了vm.overcommit_memory = 2和vm.overcommit_ratio = 100。 我想知道一个给定的进程提交了多less内存,这是贡献计数。

这不是常驻工作组,因为常驻工作组不包括换出的金额。 它也不是虚拟大小,因为虚拟大小包含mmap()ed文件,这些文件不会影响提交限制。

运行进程ID的pmap -x PID来显示内存分配。

 [root@ObamaBiden ~]# pmap -x 8106 8106: /opt/dbcfs/dbcfsrun 10.51.64.76 4483 /opt/dbcfs/dbcfs.cfg 9584:1 -ssl Address Kbytes RSS Dirty Mode Mapping 0000000000266000 120 96 0 rx-- ld-2.12.so 0000000000284000 4 4 4 rx-- ld-2.12.so 0000000000285000 4 4 4 rwx-- ld-2.12.so 0000000000288000 1584 388 0 rx-- libc-2.12.so 0000000000414000 8 8 8 rx-- libc-2.12.so 0000000000416000 4 4 4 rwx-- libc-2.12.so 0000000000417000 12 8 8 rwx-- [ anon ] 0000000008048000 912 624 0 rx-- dbcfsrun 000000000812c000 56 44 36 rwx-- dbcfsrun 000000000813a000 152 60 60 rwx-- [ anon ] 0000000008a51000 280 132 132 rwx-- [ anon ] 00000000f678c000 16008 5396 5396 rwx-- [ anon ] 00000000f7739000 4 4 4 rwx-- [ anon ] 00000000f773a000 4 4 0 rx-- [ anon ] 00000000ffd8a000 84 32 32 rwx-- [ stack ] ---------------- ------ ------ ------ total kB 19236 6808 5688 

您可以在内核文档中查看成本映射 。 简而言之,共享匿名或/dev/zero映射的大小只有一次,而私有可写映射则为每个实例计数一次。

您可以使用pmap精确地查看特定进程正在映射什么以及如何进行映射。 由pmap -d生成的输出包含一个页脚行,其中包含私有可写映射的总聚合大小。