top 커맨드의 메모리 관련 내용(VIRT, RES, SHR, %MEM)를 설명한다.
이를 설명하기 좋은 프로세스는 mongodb인 듯 해서 그 부분만 정리했다.
실제 메모리를 보기 위해 free 커맨드를 실행하면 cached 메모리 때문에 마치 used 메모리가 상승했다.
$ free
total used free shared buffers cached
Mem: 16289804 15621900 667904 188 148776 7787380
-/+ buffers/cache: 7685744 8604060
Swap: 10485756 0 10485756
top으로 보면 대략 전체 메모리는 16G이고 사용 중인 메모리는 15G이다.
VIRT는 12.8G, RES는 6.7G, SHR은 6512로 나타난다.
$ top
Mem: 16289804k total, 15621300k used, 668504k free, 148776k buffers
Swap: 10485756k total, 0k used, 10485756k free, 7787328k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
17075 www 20 0 12.8g 6.7g 6512 S 0.7 43.2 4321:34 mongod
이것만 보고 정말 물리 메모리를 더 꽂아야 하냐고 묻길래. 아니라고 답변해 주었다.
top 커맨드의 중요 메모리 설정을 살펴본다.
* VIRT는 프로세스의 가상 크기를 의미한다. 실제로 사용하고 있는 메모리의 총합을 의미한다. VIRT는
디스크의 파일을 읽으면서 사용했던 메모리도 포함될 수 있다. VIRT는 프로그램이 현재 얼마나 많은 메모리를 접근할 수 있는지 나타낸다. (즉 물리 메모리의 사용한 공간을 의미하지 않는다.)
* RES는 실제 물리 메모리를 얼마나 쓰고 있는지 나타낸다. 따라서 VIRT보다는 작은 값을 보여준다.
%MEM의 내용에 연관된다.
* SHR은 VIRT 메모리 중 공유 메모리를 보여준다.
참고로 리눅스에서 물리 메모리 페이지 영역을 볼 수 있다.
특정 PID의 세그먼트(segment)에 할당된 물리 메모리 페이지를 보여준다.
$ cat /proc/${PID}/smaps
..
7f8248fb2000-7f8249223000 rw-p 00000000 00:00 0
Size: 2500 kB
Rss: 1492 kB
Pss: 1492 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 1492 kB
Referenced: 1488 kB
Anonymous: 1492 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
7f8249223000-7f8249472000 ---p 00000000 00:00 0
Size: 2364 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
7f8249472000-7f824948c000 r-xp 00000000 08:02 1326344 /usr/java/jdk1.8.0_25/jre/lib/amd64/libzip.so
Size: 104 kB
Rss: 84 kB
Pss: 43 kB
Shared_Clean: 60 kB
Shared_Dirty: 0 kB
Private_Clean: 24 kB
Private_Dirty: 0 kB
Referenced: 84 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
...
이 정보의 간략화된 버전이다.
$ cat /proc/${PID}/maps
7f8248fb2000-7f8249223000 rw-p 00000000 00:00 0
7f8249223000-7f8249472000 ---p 00000000 00:00 0
7f8249472000-7f824948c000 r-xp 00000000 08:02 1326344 /usr/java/jdk1.8.0_25/jre/lib/amd64/libzip.so
더 깊이 보면 보면 재미있어야 할 내용들 레퍼런스
2. https://www.youtube.com/watch?v=twQKAoq2OPE
3. https://web.eecs.umich.edu/~pmchen/eecs482/handouts/memory.pdf