我有一个消耗大量 RAM 的 Java 进程,我试图弄清楚他在用所有这些内存做什么。所以,我在这个 PID 上做一个 pmap -x ,这是结果的一部分:
Address Kbytes RSS Dirty Mode Mapping
0000000000001000 4 0 0 rw--- [ anon ]
0000000000400000 48 0 0 r-x-- java
000000000050b000 4 4 4 rw--- java
0000000003b9d000 264 224 212 rw--- [ anon ]
0000000003bdf000 2199556 1887992 1830160 rw--- [ anon ]
000000396c800000 112 108 0 r-x-- ld-2.5.so
000000396ca1c000 4 4 4 r---- ld-2.5.so
[...]
ffffffffff600000 8192 0 0 ----- [ anon ]
---------------- ------ ------ ------
total kB 7072968 4382820 4270104
正如您在地址 3BDF000 上看到的,有 2199556 KB 与 1830160 脏的映射。
在 /proc/10139/smaps 中,可以看到更多详细信息:
03bdf000-89fe0000 rw-p 03bdf000 00:00 0
Size: 2199556 kB
Rss: 1887996 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 57832 kB
Private_Dirty: 1830164 kB
Swap: 231996 kB
Pss: 1887996 kB
因此,我想知道这个脏内存是什么?我猜这些页面不必写入磁盘,那么为什么它们被称为脏页呢?