비활성 메모리는 커밋되었지만 사용되지 않은 메모리와 관련이 있나요?

비활성 메모리는 커밋되었지만 사용되지 않은 메모리와 관련이 있나요?

~에서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에 있고 어느 시점에 사용되었지만 최근에 사용되지 않았기 때문에 페이징 대상)을 포함하여 모든 프로세스가 사용 가능한 것으로 간주하는 메모리 공간의 합계입니다.) 페이징( RAM에 한 번 있고 최근에 사용됨) 스왑 공간이 페이지 아웃된 이후 사용됨) 전혀 사용되지 않음(malloc()에 의해 반환되었지만 아직 건드리지 않은 공간)

답변2

man proc직접 인용문을 참조하세요 .

(malloc(3) 또는 유사한 방법을 사용하여) 1GB의 메모리를 할당했지만 해당 메모리 중 300MB만 건드리는 프로세스는 전체 1GB의 주소 공간을 할당했음에도 불구하고 300MB의 메모리만 사용하는 것처럼 보입니다. 이 1GB는 VM의 "커밋된" 메모리이며 할당 애플리케이션에서 사용할 준비가 되어 있습니다.

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

이것도 직접적으로 관련이 있어요overcommit_memory sysctl서버가 메모리의 "과잉 할당"을 방지하는 데 사용할 수 있는 구성 설정입니다.OOM한 번에 모든 "커밋된" 메모리가 필요한 경우 자체적으로 실행됩니다.

관련 정보