지난번에는 CPU 와 관련된 내용은 stat 파일에 대하여 알아 보았다.

이번에는 메모리와 관련된 정보에 대하여 자세히 알아 보도록 하자.


해당 프로세스가 사용하는 메모리에 관련된 내용은 아래와 같이 statm 이라는 파일을 이용하여 알 수 있다.


/proc/[pid]/statm

메모리 사용에 대한 정보를 제공한다.

              Provides information about memory usage, measured in pages.  The columns are:

                  size       : 전체 프로그램의 사이즈 (/proc/[pid]/status 에 있는 VmSize와 같은값 ) total program size (same as VmSize in /proc/[pid]/status)
                  resident   : 스왑되지 않고 설정된 사이즈  (/proc/[pid]/status 에 있는 VmRSS와 같은값)
                  share      : 공유 페이지
                  text       : 텍스트 (코드) 사이즈
                  lib         : 라이브러리 사이즈( Linux 2.6 에서는 사용되지 않는다.)
                  data      :  데이타 와 스택 을 합한 사이즈
                  dt         : dirty pages ( Linux 2.6 에서는 사용되지 않는다.)


현재 시스템 상에서 값을 출력해 보면 다음과 같이 출력 된다.


$ cat /proc/1/statm
761 470 310 29 0 177 0


시스템에서 사용하는 메모리는 /proc/meminfo 파일을 이용하여 알수 있다.


우리가 주로 사용하는 명령어인 free 명령어의 경우 추측 하건데 /proc/meminfo 파일을 파싱하여 사용자에게 보여주는게 아닐까 추측 해 본다.



지난번에 알아 보았던 stat 와 이번에 알아본 statm을 사람이 좀더 쉽게 알아 보게 하기 위하여 /proc/[pid]/status 파일을 제공한다.


필드에 대한 상세 내용은 다음과 같다.

              * Name: 프로세스가 실행된 명령어 이름
              * State: 프로세스의 현재 상태

                R은 동작중, S는 인터럽트 가능한 슬립상태, D는 인터럽트 불가능한 슬립 상태, Z는 좀비, T는 트레이스중 혹은 시그널에 의하여 멈춤, W는 paging 중.

              * Tgid: 스레드 GROUP ID 또는  프로세스 ID
              * Pid: 스레드 ID.
              * TracerPid: 프로세스 추척을 위한 PID
              * Uid, Gid: 실제로 파일시스템에 저장된 UID, GID.
              * FDSize: 현재 할당되어 있는 파일 디스크립터 슬롯의 갯수
              * Groups: group 리스트의 보조 정보
              * VmPeak: 최고로 할당된 가상메모리 크기
              * VmSize: 가상 메모리 크기
              * VmLck: 잠겨있는 메모리 크기
              * VmHWM: 스왑되지 않고 설정된 가장 큰 크기.
              * VmRSS: 스왑되지 않고 설정된 크기.
              * VmData, VmStk, VmExe: 데이타, 스텍, 텍스트 세그먼트의 크기.
              * VmLib: 공유라이브러리 코드의 크기.
              * VmPTE: 페이지 테이블 엔트리 크기.
              * Threads: 프로세스에 포함된 스래드들의 개수.
              * SigPnd, ShdPnd: 스레드와 프로세스를 위한 시그널 팬딩의 수.
              * SigBlk, SigIgn, SigCgt: 마스킹된 블럭, 무시된, 캐치된 시그널의 수
              * CapInh, CapPrm, CapEff: 싱속, 퍼밋, 이펙티스셋이 인에이블된 수
              * CapBnd: 본딩셋된 능력
              * Cpus_allowed: 해당 프로세스가 동작 할 수 있는 CPU 수
              * Cpus_allowed_list: 위와 동일, 그러나 포멧이 다르다.
              * Mems_allowed: 이 프로세스에 허락된 메모리 노드수
              * Mems_allowed_list: 위와 동일, 그러나 포멧이 다름.
              * voluntary_context_switches, nonvoluntary_context_switches: 자발적 비자발적 컨텍스트 스위치된 수 ( Linux 2.6.23 이후 부터)



proc man 페이지를 참고 하였다.