시스템 모니터(Ubuntu 10.04)에 따르면 노틸러스는 450MiB를 차지합니다.
$pmap <PID of Nautilus>
...
total 1578276K
여기에 보고된 메모리는 1.5GiB입니까 pmap
? 내가 뭘 잘못하고 있는지, 문제가 어디에 있는지 추론할 수 있도록 무엇이 450MiB를 차지하고 있는지 알아내려고 노력 중입니다.
답변1
프로그램이 얼마나 많은 메모리를 사용하는지에 대한 간단한 아이디어는 없습니다.
출력은 pmap
프로세스에 의해 매핑된 모든 가상 메모리를 설명합니다. 매핑은 프로세스가 데이터를 로드하거나 액세스를 요청하기 위한 추가 명령을 실행하지 않고도 포인터를 통해 데이터에 액세스할 수 있음을 의미합니다. 매핑된 가상 메모리는 항상 RAM에 있는 것은 아닙니다. 교체하거나 파일에 있을 수 있습니다. 예를 들어, 프로그램에서 사용하는 모든 공유 라이브러리는 이를 사용하는 모든 프로세스에 매핑되지만 (대부분의 경우) 전체 시스템의 RAM에는 단 하나의 복사본만 보관되며 해당 복사본을 메모리에 완전히 로드할 필요는 없습니다. 메모리(필요한 부분은 디스크 파일에서 로드됩니다). 1.5GB 수치에는 프로세스의 코드, 정적 데이터, 공유 메모리 및 자체 데이터가 모두 포함됩니다. 별로 의미있는 숫자는 아닙니다.
pmap
간단한 재포맷입니다 /proc/$pid/maps
.Linux /proc/id/maps 이해각 열의 의미를 설명합니다.
450MB 숫자(제 생각에는)는 현재 RAM에 있는 비공유 메모리인 프로세스의 상주 세트입니다. 여기에는 프로세스에만 속한 데이터(교환 가능)뿐만 아니라 프로세스가 쓰기 위해 연 파일(나중에 파일에서 다시 로드하기 위해 제거될 수 있는 디스크 버퍼)도 포함됩니다.
450MB의 메모리를 더 이상 쉽게 분해할 수 없습니다. 이는 프로그램 작성자의 작업이며 디버깅 도구가 필요합니다.