在linux下基于process_vm_readv
写了一个扫描进程各个段内存的demo,demo中限定了只扫描已存在于物理内存中的页(/proc/$pid/pagemap
中page present
flag为1),执行后发现/proc/$pid/smaps_rollup
中展示的进程内存发生了比较明显的变化,特别是Private_Dirty
和Anonymous
。
按理说只是读内存的话不应该出现private_dirty
大量增加,想请教下各位师傅们是什么原因Orz。
下面是扫描前后两个日志文件的内容对比,被扫描程序是自己起的一个tail -f /dev/null
,但经测试,其它被扫描进程也会稳定复现相同的内存变化:
root@xdw:~# diff -Nur /tmp/before.log /tmp/after.log
--- /tmp/before.log 2022-02-28 21:12:56.561946045 +0800
+++ /tmp/after.log 2022-02-28 21:13:15.970092817 +0800
@@ -1,15 +1,15 @@
55e03941e000-7ffe63dad000 ---p 00000000 00:00 0 [rollup]
Rss: 2188 kB
-Pss: 205 kB
-Pss_Anon: 108 kB
-Pss_File: 97 kB
+Pss: 2188 kB
+Pss_Anon: 2188 kB
+Pss_File: 0 kB
Pss_Shmem: 0 kB
-Shared_Clean: 2012 kB
+Shared_Clean: 0 kB
Shared_Dirty: 0 kB
-Private_Clean: 68 kB
-Private_Dirty: 108 kB
+Private_Clean: 0 kB
+Private_Dirty: 2188 kB
Referenced: 2188 kB
-Anonymous: 108 kB
+Anonymous: 2188 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB