/var/log/messages
RAM에 존재하는 프로세스를 분석하기, pmap 본문
메모리 사용량을 볼 때는 크게 free, sar를 이용한다.
그런데, 이게 자세하게는 확인하지 못한다. 무슨 뜻인지는 이 글을 읽어보자.
어느 날 무의식적으로 들었던 생각이 있었다.
라우터에서 show running-config를 입력하면 그 라우터의 메모리에 있는 모든 것들을 볼 수 있는데, 그럼 리눅스에서는 어떻게 해야 볼 수 있을까?
이에 대한 답은 생각보다 간단했다.
그러나, 생각보다 만족스럽지 않았다. 자세하지 않았던 이유였다.
그러나 pmap [pid] 을 알아봤는데 생각보다 너무 자세했다.
pmap을 이용하면 프로세스가 메모리 자원을 얼마나, 어떻게 사용했는지를 그 어떤 명령어보다 자세하게 알 수 있다.
이 명령어는 메모리의 어떤 주소에 있었는지 까지도 출력을 하기 때문에 매우 많은 내용들이 출력이 된다.
그렇기에, 예시는 head 명령어를 이용할 것이다.
실습을 위해서는 한번이라도 head나 tail 없이 출력하는 것을 권장한다.
1. /usr/lib/gnome-session-binary:
이 바이너리 파일은 GNOME 세션을 관리하는 프로그램입니다.
여러 메모리 주소 범위에 걸쳐 매핑되어 있으며, 주소 범위마다 다른 권한 (읽기, 쓰기, 실행)을 가집니다.
예를 들어, 주소 000055c841800000에서는 바이너리가 실행 권한 (r-xp-)으로 매핑되어 있습니다.
2. [ anon ]:
이 항목은 이름이 없는 메모리를 나타냅니다. 이는 동적으로 할당된 메모리 (예: 힙, 스택) 또는 메모리 매핑된 파일의 일부일 수 있습니다.
여러 주소 범위에 걸쳐 있으며, 대부분 rw-p- (읽기/쓰기 권한)으로 매핑되어 있습니다.
몇몇 주소 범위에서는 ---p- 권한이 있어, 해당 메모리 영역에는 현재 접근할 수 없으며, 필요에 따라 매핑될 수 있습니다.
3. Kbytes, RSS, PSS, Dirty, Swap:
Kbytes: 해당 주소 범위에 할당된 메모리의 크기입니다.
RSS (Resident Set Size): 실제로 RAM에 로드된 페이지의 크기입니다.
PSS (Proportional Set Size): 해당 프로세스만 사용하는 메모리와 다른 프로세스와 공유하는 메모리의 합계입니다.
Dirty: 수정된 페이지의 크기입니다.
Swap: 스왑 영역에 저장된 페이지의 크기입니다.
이 테이블의 데이터를 바탕으로, GNOME 세션 바이너리는 여러 메모리 주소 범위에 걸쳐 다양한 권한으로 매핑되어 있으며, 많은 메모리 영역이 동적으로 할당되어 사용되고 있음을 알 수 있습니다.