강좌 & 팁
지난번에는 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
우리가 주로 사용하는 명령어인 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 페이지를 참고 하였다.