"메모리 점유"는 항상 커밋이 보장되는 메모리를 의미하는 것으로 이해합니다. 즉, VMA의 모든 페이지가 RAM 또는 스왑에 있으므로 모든 페이지를 할당해야 합니다.
그러나 플래그가 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의 크기는 132kB인데 8kb만 상주하므로 124kB는 커밋되지 않은 상태로 남아 있습니다.
ac
이 경우에는 무엇을 의미합니까? "지역이 책임진다"는 뜻 man proc
이라고 하는데 ac
정확히 무슨 뜻인지는 모르겠습니다.
답변1
나는 "ac" 매핑된 VMA가 OOM 킬러 가중치에 포함되고 있다고 생각합니다. 예를 들어, glibc 스택 가드는 ac로 표시되지 않으므로 포함되지 않습니다.