비활성 메모리는 Commited와 관련이 있지만 사용되지 않습니까?

비활성 메모리는 Commited와 관련이 있지만 사용되지 않습니까?

에서Linux procfs 문서:

      Active: Memory that has been used more recently and usually not reclaimed unless
              absolutely necessary.
    Inactive: Memory which has been less recently used. It is more eligible to be
              reclaimed for other purposes
Committed_AS: The amount of memory presently allocated on the system. The committed 
              memory is a sum of all of the memory which has been allocated by 
              processes, even if it has not been "used" by them as of yet. (...)

내 질문은 Commited_AS 메모리와 실제로 사용되거나 사용되지 않는 부분과 관련이 있습니다. 내 이해는 활성 메모리가 실제로 사용되는 커밋된 메모리의 일부라는 것입니다. 그러나 나는 비활성 메모리에 무슨 일이 일어나는지 모릅니다. 최근에 사용되지 않은 메모리를 제외하고 커밋되었지만 사용되지 않은 메모리도 포함됩니까?

답변1

비활성 메모리는 프로세스가 어느 시점에 사용하고 여전히 할당되어 있지만 최근에는 사용되지 않은 메모리입니다. 새로 필요한 블록을 위한 공간을 확보하기 위해 페이지 아웃될 가능성이 가장 높은 메모리입니다.

커밋된 메모리는 명목상 프로세스에 할당된 모든 공간의 합계입니다. 이는 활성(RAM에 있고 최근에 사용됨), 비활성(RAM에 있고 어느 시점에 사용되었지만 최근에 사용되지 않았기 때문에 페이징 대상)을 포함하여 사용 가능하다고 믿는 모든 메모리 공간 프로세스의 집합입니다. 사용됨, 스왑을 위해 페이지 아웃된 이후) 사용되지 않았음(malloc()에 의해 반환되었지만 아직 건드리지 않은 공간)

답변2

보다 man proc; 직접 인용하려면:

1GB의 메모리를 할당하는 프로세스(malloc(3) 또는 유사 사용) 그러나 해당 메모리 중 300MB만 건드리면 전체 1GB에 할당된 주소 공간이 있더라도 300MB의 메모리만 사용하는 것으로 표시됩니다. 이 1GB는 VM에 의해 "커밋"된 메모리이며 할당 애플리케이션에서 언제든지 사용할 수 있습니다.

Committed_AS동적 메모리 할당을 위해 시스템에서 요청된 총 메모리 양을 나타냅니다. 이는 비활성 메모리(힙에 없음)가 계산되지 않음을 의미합니다. 이것이 바로 가상 메모리의 힘이 발휘되는 곳입니다. 프로세스는 요청한 모든 메모리를 가지고 있다고 "생각"하지만 실제로는 필요한 것만 가지고 있습니다.

이는 또한 다음과 직접적으로 연결됩니다.overcommit_memory sysctl서버가 메모리를 "과도하게 할당"하지 않도록 방지하는 데 사용할 수 있는 구성 설정입니다.OOM한 번에 모든 "커밋된" 메모리가 필요한 경우 자체적으로 실행됩니다.

관련 정보