컨텐츠 바로가기

[Linux] Top 항목에서 메모리 사용 살펴보기

http://mcchae.egloos.com/11132073

top 이라는 리눅스 명령어가 있습니다.
각종 CPU, 메모리 등의 사용률을 TopN 순으로 표시를 해 주는 것이지요.

그런데 위와 같은 곳에서 메모리와 관련된 곳은,

위와 같이 VIRT, RES, SHR, %MEM 과 같은 컬럼이 메모리와 관련되어 있습니다.
CPU 등에 비하여 내용이 꽤 많습니다.

이제 다음과 같은 질문이 당연히 나올 수 있는데...


상단의 터미널에서 살펴본 첫번째 Java는 3.2G의 VIRT를 가지고 있군요....

결론적으로 말씀드리면, 가상메모리 VIRT 자체는 실제 메모리를 이용하고 있는 것이 아니기 때문에 신경 쓸 이유는 없다 입니다.
실제로 물리적 메모리를 사용하고 있는 항목은 RES 필드에 있는 내용입니다.

그런데 재미있는 것은 mongod와 같은 프로세스는,

위와 같이 가상메모리(VIRT)는 4.9G를 이용하고 있는데 실제 메모리(RES)는 38M를 가리키고 있습니다.
이 이유는 가상메모리가 "Addressing space"를 가리키기 때문이라고 합니다.

예를 들어 몽고DB가 4G짜리 파일에 메모리맵(mmap)을 통한 작업을 하면,
이 address space는 mmap 된 전체 파일의 크기가 되기 때문에 가상 메모리가 무척 크게 보이는 이유입니다.
하지만 실제로는 커널이 접근하는 address의 크기에 따라서 page 되기 때문에 실제 이용하는 메모리는
얼마큼의 서로 다른 페이지를 이용하는가에 따라 틀립니다.

따라서 실제 메모리 사용률은 1/100 도 안되는 38M 만 이용하게 되는 이유이지요.
가상 메모리는 실제 그 만큼의 주소를 가질 수 있다라고 이해를 하시고, 실제 메모리는 RES 필드를 보시면 됩니다.

다시 top 이 보여주고 있는 목록에서 디폴트는 CPU 이용을 제일 많이 하는 프로세스가 보이는데,
'F' 키를 누르면,

위와 같이 소팅컬럼이 보입니다. 이곳에서, 'q' 키를 누르면,

실제 메모리 사용율 (RES)로 소팅을 하며,

위와 같이 정렬되어 실제 메모리를 많이 사용하고 있는 프로세스 별로 살펴볼 수 있습니다.

위와 같은 top 명령은 일반 linux 인 경우이고, Embeded linux에서 이용하는 busybox의 top 명령은 약간 다릅니다.

busybox의 top 명령을 내리면,

위와 같이 디폴트 CPU 정렬의 모습이 보입니다. (프로세스 명은 보안을 위하여 제외시켰습니다)

여기에서 VSZ가 가상메모리 크기입니다.
앞서 언급한 것처럼 이것만 가지고는 실제 메모리 이용율을 알 수는 없습니다.

여기에서 's' 키를 누르면,

위와 같이 VSZRW (현재 읽고 쓰는 가상메모리 영역) 크기가 나오는데,
's'키를 한번 더 누르면,

이 RSS 컬럼별로 정렬이 되는데,
이것이 바로 실제 메모리를 많이 사용하는 있는 순으로 표시가 됩니다.

즉, busybox 인 경우, top을 실행하고 'ss'를 눌러 위와 같이 실제 사용 메모리를
확인할 수 있습니다.


어느분께는 도움이 되셨기를....

덧글|덧글 쓰기|신고