我理解“占用内存”是指确保始终提交的内存,这意味着:VMA 的每个页面都在 RAM 或交换中,因此必须分配每个页面。
但是,如果 I cat /proc/self/smaps
,我可以看到 具有[heap]
标志ac
(我已从输出中省略了不相关的字段):
<addr> rw-p 00000000 00:00 0 [heap]
Size: 132 kB
Rss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Anonymous: 8 kB
Swap: 0 kB
THPeligible: 0
VmFlags: rd wr mr mw me ac sd
然而,VMA 的大小为 132 kB,但只有 8kb 是常驻的,因此还有 124kB 尚未提交。
ac
在这种情况下意味着什么?上面说man proc
的ac
意思是“该地区负责”,但我真的不知道是什么意思。
答案1
我相信“ac”映射的 VMA 正在计入 OOM 杀手权重。例如,glibc 堆栈保护没有用 ac 标记,因此它们不算数。