Linux에서 메모리 사용량은 어떻게보고됩니까?


17

ps를 사용하여 크기, vsize (top의 VIRT?와 동일) 및 rss (top의 RES?와 동일)를 볼 수 있습니다. (맨 위에 보이는 것은 SHR입니다.)

누군가 다른 분야가 무엇을 의미하는지 요약 해 주시겠습니까?


이 페이지에서 참조로 사용될 수 있도록 사라질 수있는 링크보다이 페이지에 대한 요약을보고 싶습니다.
Jim Hunziker

답변:


34

한마디로 :

  • 가상 크기 : 프로세스가 관리하는 주소 공간의 양입니다. 가상 주소 공간에는 프로세스가 포인터 (메모리 주소 참조)를 통해 액세스 할 수있는 모든 것이 포함됩니다. 예를 들어, 프로그램이 비디오 카드의 프레임 버퍼에 액세스하면 해당 메모리는 프로세스 가상 공간에 매핑되고 포인터에 저장된 주소를받습니다. 메모리 매핑 된 파일과 익명 매핑도 가상 주소 공간 크기에 반영됩니다. 거의 모든 것이 가상 크기입니다. 에 나열된 모든 주소 범위의 크기를 합하면 /proc/<pid>/maps대략 동일한 가상 크기 값을 반환해야합니다.

  • 상주 크기 : 현재 메모리에 상주하는 프로세스에 특별히 속하는 메모리의 양입니다. 이는 스왑에없는 메모리의 양을 의미합니다. 프로세스가 실행 중일 때도 프로세스의 일부가 스왑 메모리에있을 수 있습니다. 운영 체제는 프로세스가 액세스하려고 할 때 이러한 영역을 스왑에서 가져옵니다. 여기에는 힙, 모든 스레드의 스택 및 기타 개인 매핑이 포함되어야합니다. 당신이 보는 경우 /proc/<pid>/maps[stack], [heap]다른 익명의 매핑 (파일 경로가없는 사람들은) 중 교환 또는 주민 크기 회계 처리하고 있습니다.

  • 공유 크기 : 여러 프로세스에 속할 수있는 메모리 양입니다. 예를 들어, 동일한 응용 프로그램의 인스턴스가 4 개 메모리에로드 된 경우 힙의 인스턴스 4 개와 각 프로세스마다 하나씩 4 개 이상의 스택 (상주 메모리 임)이 있지만 인스턴스는 하나만 있습니다. 프로그램과 라이브러리의 이진 코드. 이것은 공유 공간입니다. 프로그램 바이너리 코드와 라이브러리뿐만 아니라 현지화 파일, 읽기 전용 프로그램 데이터, SysV 및 POSIX 공유 메모리 세그먼트, 세마포어 등도 포함 /proc/<pid>/maps됩니다. 공유했습니다.

VIRT에는 RSS와 SHR의 결합이 포함되며 항상 그 중 하나보다 큽니다. RSS와 SHR 모두로 설명되는 영역이있을 수 있습니다.


2
또한 최신 Linux 버전에서는 / proc / <pid> / smaps에서 매우 자세한 메모리 사용량 분석을 볼 수 있습니다.
bdonlan

1
공유 크기는 공유 될 수 있는 메모리입니다 . 응용 프로그램이 라이브러리의 단독 사용자 인 경우 라이브러리는 단일 프로세스에 의해 메모리에 유지됩니다. 이 방법으로 공유 메모리도 "프로세스 소유"메모리가 될 수 있습니다.
Hubert Kario

6

줄리아노에서 대답 :

RSS + SHR <= VIRT, 항상.

이것은 단지 거짓입니다. SHR에는 다른 프로세스와 공유 할 수있는 모든 가상 메모리가 포함되며 RSS에는 프로세스에서 사용하는 RAM에 물리적으로 모든 메모리가 포함됩니다.

따라서 현재 RAM에있는 모든 공유 메모리는 SHR과 RSS 모두에서 카운트되므로 SHR + RSS는 중복 카운트를 포함 할 수 있으므로 의미가 없습니다.

RSS + SHR> VIRT로 프로세스를 구성하려면 큰 파일 (1GB)을 mmap 한 다음 완전히 읽으십시오. mmaped 파일은 RAM에로드되고 VIRT, SHR 및 RSS는 각각 1GB보다 크게 커지므로 SHR + RSS> VIRT.


예, 다른 두 가지보다 VIRT에 대한 설명이었습니다. 내가 염두에 두었던 것은 RSS와 SHR의 합보다 그 합보다 더 많은 것이 었습니다. 즉 VIRT는 RSS와 SHR을 모두 포함합니다. 수학적 표현이 잘못되었습니다.
Juliano
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.