가상 메모리 사용량 보기

가상 메모리 사용량 보기

프로그램에서 700개 이상의 스레드를 시작했는데 내 /proc/[PID]/status파일에 다음과 같은 출력이 표시됩니다.

VmPeak:  7228104 kB
VmSize:  7228104 kB
VmLck:         0 kB
VmHWM:      3456 kB
VmRSS:      3456 kB
VmData:  7222340 kB
VmStk:        88 kB
VmExe:         4 kB
VmLib:      1540 kB
VmPTE:      2864 kB
StaBrk: 15e84000 kB
Brk:    15ec6000 kB
StaStk: 7fff765095a0 kB
Threads:        706

하지만 2GB RAM과 4GB 스왑 공간만 있습니다. 가상 메모리가 어떻게 7GB 이상에 도달하는지 알려줄 수 있는 사람이 있나요?

답변1

일부 요청 페이징 가상 메모리 시스템에서 운영 체제는 익명 페이지(즉, 런타임 데이터, 프로그램 스택 등과 같이 파일 시스템 소스가 없는 데이터가 포함된 페이지)를 교환할 수 있는 충분한 스왑 공간이 없으면 할당을 거부합니다. 물리적 메모리를 해제하기 위한 페이지입니다. 이러한 엄격한 계산의 장점은 각 프로세스가 할당된 만큼의 가상 메모리에 대한 액세스를 보장한다는 것입니다. 그러나 이는 사용 가능한 가상 메모리의 양이 본질적으로 스왑 공간의 크기에 의해 제한된다는 의미이기도 합니다.

실제로 프로그램은 사용하는 것보다 더 많은 메모리를 할당하는 경우가 많습니다. 예를 들어, JVM(Java Virtual Machine)은 시작 시 대량의 가상 메모리를 할당하지만 즉시 사용하지는 않습니다. Linux 커널의 메모리 통계는 프로세스가 실제로 사용하는 메모리 양을 추적하여 이를 보상하려고 하며 가상 메모리 양을 과도하게 사용합니다. 즉, 커널이 할당한 가상 메모리의 양은 시스템의 실제 메모리와 스왑 공간을 합친 것보다 클 수 있습니다. 이를 통해 물리적 메모리와 스왑 공간을 더 잘 활용할 수 있지만, 사용된 메모리 양이 사용 가능한 물리적 메모리 및 스왑 공간의 양을 초과하는 경우 커널은 메모리 할당 약속을 충족하기 위해 어떻게든 메모리 리소스를 확보해야 한다는 단점이 있습니다.

메모리를 회수하는 커널 메커니즘은 다음과 같습니다.메모리 부족 킬러(OOM 킬러). 일반적으로 이 메커니즘은 메모리를 많이 차지하는 "불량" 프로세스를 종료하여 다른 프로세스를 위해 메모리를 확보합니다. 일부 환경에서는 메모리를 확보하고 시스템을 백업 및 실행하는 실행 가능한 옵션은 재부팅입니다. 이러한 경우 sysctl 설정을 통해 메모리 부족 상태에서 패닉이 발생하도록 커널을 구성할 수 있습니다 vm.panic_on_oom.

커널에서 사용하는 메모리 계산 경험적 방법은 vm.overcommit_memorysysctl 설정을 통해 더욱 자유롭게 또는 엄격하게 만들 수 있습니다. 엄격한 메모리 통계를 사용할 때 페이지를 저장할 수 있는 여유 물리적 메모리나 스왑 공간이 충분하지 않으면 커널은 더 이상 익명 페이지를 할당하지 않습니다. 이는 시스템이 다음을 수행해야 함을 의미합니다.충분한 스왑 공간이 구성되었습니다..

답변2

접선으로, 스레드가 생성되고 작업이 완료된 후 스레드 함수가 종료되지만 VmDATA가 계속 증가하면 메모리 누수가 발생합니다.

일반적으로 pthread_exit는 스레드 함수가 종료될 때 암시적이지만 스레드 리소스는 pthread_join 또는 pthread_detach까지 해제되지 않습니다. 따라서 힙에서 스레드 스택을 명시적으로 해제하고 누수를 닫으려면 명시적으로 Join 또는 Detach를 호출하십시오.

답변3

가상 메모리는 프로세스에서 실제로 사용하는 메모리가 아니라 프로세스가 할당된 메모리를 모두 사용할 경우에만 사용할 수 있는 메모리이기 때문입니다.

"가상 메모리"라는 용어는 흔히 혼동되는 주제이므로 온라인에 수많은 설명이 있으며, 다음은 그 중 하나입니다.http://en.wikipedia.org/wiki/Virtual_memory

이것은 Linux에 더 구체적입니다.http://www.tldp.org/LDP/tlk/mm/memory.html

관련 정보