2009-12-02 15 views
3

무료 메모리 사용량은 어떻게 계산되며,/proc 리포트와 다른 점은 무엇입니까?무료 메모리 사용량은 어떻게 계산됩니까?

# cat /proc/*/status | grep VmSize | awk '{sum += $2} END {print sum}' 
281260 

하지만 무료는 말한다 :

# free 
      total  used  free  shared buffers  cached 
Mem:  524288  326488  197800   0   0   0 

를 잘 작성 누구입니까? 281260kb 메모리가 사용 되었습니까, 아니면 326488kb입니까?

+0

나는 자유 참조/proc/meminfo를 믿는다. –

+1

프로세스의 VmSize와 프로세스의 사용 된 메모리는 직접적인 관계가 없다. 예를 들어 프로세스가 비디오 카드 메모리를 매핑하면 VmSize에 추가되지만 사용 된 메모리는 추가되지 않습니다. "가상 메모리"를 의미하는 ServerFault의 비슷한 대답을 확인하십시오. http://serverfault.com/questions/48582/how-is-memory-usage-reported-in-linux/48610#48610 – Juliano

+0

"cat/proc/*/status | grep VmSize' "쓸데없는 고양이 사용. 'grep VmSize/proc/*/status'를 선호합니다. 여전히 원자가 아니지만 최소한 포크와 파이프 라인은 아끼지 않습니다. – dmckee

답변

6

제목에 묻습니다. "사용 가능한 메모리를 어떻게 계산합니까?"

답변 : OS에 작업을 수행해야하는지 묻습니다.

보다 구체적으로, 메모리 관리 서브 시스템에 질문한다. Sheepsimulator가 주석에서 언급했듯이, 리눅스 커널은 모든 종류의 OS 유지 데이터를 가상 파일 시스템의 /proc에 공개하지만 모든 풀 서비스 OS는 데이터 종류를 추적해야하므로 free에 API를 제공하는 것은 중요하지 않습니다. 용도.

질문 : "모든 프로세스에 대해보고 된 VmSize를 추가하는 것과 왜 다른 점이 있습니까?"

답변 : 적어도 것은 리눅스는 실제로 할당하지 않고 프로그램에 메모리를 약속합니다 여기

  1. 진행에있다. char *p=new(1024*1024*1024*sizeof(char)); 할 때 커널이 나가지 않고 바로 기가 바이트를 얻을 수 있습니다. "OK"라고 말하면 수치를 사용하기 시작하면 수치가 표시됩니다. 따라서 악명 높은 사람들의 필요성은 OOM killer입니다.
  2. 동적 라이브러리는 공유되며 실제 메모리의 단일 페이지는 둘 이상의 프로세스의 가상 주소 공간에 매핑 될 수 있습니다.

또한, proc 파일 시스템을 통한 전달은 원 자성이 아닙니다.

출력은 free의 출력이 주어진 순간에 컴퓨터의 실제 메모리 사용을보다 정확하게 반영한다는 결론에 도달했습니다.

+0

나는 당신이 그 질문을 잘못 이해했다고 생각합니다. 예, OS가 제공하는 숫자는 무료입니다. 그러나 그 숫자는 어디에서 왔으며 왜 VmSize와 무료 숫자가 다른가? VmSize 합계가 무료 보고서보다 클 때 훨씬 더 혼란 스럽습니다. –

+0

예. 나는 결국 거기에 도착했다. .. – dmckee

1

'자유'의 결과는 (실제로 존재하는 것보다 단지 가상 메모리 Afterall는, 더 많은 메모리를 추가 할 수있는!) 각 프로세스의 가상 메모리 크기까지 추가보다 정확한 가능성이

/proc/meminfo는 'free'보다 더 자세한 내용을 줄 것이다.

관련 문제