2009-09-10 8 views
7

임베디드 리눅스 메모리 사용법을 이해하려고합니다.리눅스에서 MemFree를 계산하는 방법

top 유틸리티와/proc/meminfo 프로세스 파일을 사용하면 프로세스에서 사용중인 가상 메모리의 양과 시스템에서 사용할 수있는 실제 메모리의 양을 알 수 있습니다. 그러나 어떤 주어진 프로세스에서 가상 메모리는 사용 된 실제 메모리보다 훨씬 높을 수 있습니다. 이것은 임베디드 시스템이기 때문에 메모리 스왑은 사용할 수 없습니다. (SwapTotal = 0)

어떻게 리눅스가 여유 물리 메모리를 계산합니까? 가상 메모리 공간에 할당 된 모든 것을 고려하지 않는 것 같습니다.

답변

12

MemFree/proc/meminfo은 버디 할당 자에서 무료 페이지 수를 나타냅니다. 이 버디 할당자는 커널의 물리적 메모리 할당의 기본 단위입니다. 그러나 빈 SLAB를 해제하고, 캐시/버퍼 RAM을 버리거나 (실행중인 프로세스에서 PTE를 무효로하는 경우 라 할지라도) 최후의 수단으로 필요할 때마다 버디 할당 자에게 페이지를 반환 할 수있는 많은 방법이 있습니다 , 물건을 밖으로 교환.

실제로 일반적으로 MemFree은 총 물리적 RAM의 5-10 %로 제어되며 여분의 RAM은 시간이 지남에 따라 캐시에 저장됩니다. 따라서 MemFree만으로는 전체 메모리 상황을 매우 불완전하게 볼 수 있습니다.

주어진 프로세스의 가상 메모리 (VSIZE)는 프로세스의 주소 공간에있는 모든 매핑 된 메모리 세그먼트의 크기의 합계를 나타냅니다. 그러나 이들 모두가 물리적으로 존재하지는 않습니다 - 일부는 paged in upon first access 일 수 있으며 실제로 사용하기 전까지는 메모리로 등록되지 않습니다. 주어진 페이지가 여러 가상 주소에 매핑되어있는 경우 정확하지 않을 수도 있지만 에 매핑 된 페이지 만 등록하므로 거주자 크기 (RSIZE)는보다 정확한보기입니다. 여러 프로세스 고려 - 공유 라이브러리는 해당 라이브러리를 사용하는 모든 프로세스에 동일한 물리적 RAM을 매핑 함)

+0

내를 그래서 "... 그것은 단지 지금에 매핑되는 페이지를 등록하는 등, ... 상주 크기 (RSIZE) 더 정확한보기는"이 실제로 내 혼란의 핵심에 응답 생각 어떤 프로세스가 VSIZE를 모두 할당하려고 결정하면 물리적 메모리도 그만큼 증가시킬 것입니다. – simon

3

htop을 사용해보십시오. sudo apt-get install htop 또는 yum install htop을 설치해야합니다.

메모리 사용을보다 정확하게 나타냅니다.

기본적으로 "버퍼/캐시"가됩니다.

free -m 

버퍼/캐시 행의 여유 열을 살펴보면 실제로 사용할 수있는 것을보다 정확하게 나타냅니다.

   total  used  free  shared buffers  cached 
Mem:   3770  3586  183   0  112  1498 
-/+ buffers/cache:  1976  1793 
Swap:   7624  750  6874 
+0

불행히도 htop은 내 임베디드 시스템의 Busybox를 통해 사용할 수없는 것처럼 보입니다. – simon