Skip to main content

Proc

Linux에서 /proc은 가상 filesystem으로, 실제 파일들을 저장하고 있지 않고, Runtime System 정보와 같은 가상의 정보를 담고 있다. 재미있는 점은 몇 개의 파일을 제외하고 여기에 존재하는 모든 파일은 크기가 0이다.

$ ls -al /proc

total 0
dr-xr-xr-x. 166 root root 0 Dec 6 13:16 .
dr-xr-xr-x. 18 root root 237 Nov 10 19:53 ..
dr-xr-xr-x. 9 root root 0 Dec 6 13:16 1
dr-xr-xr-x. 9 root root 0 Dec 6 13:16 10
dr-xr-xr-x. 9 root root 0 Dec 6 13:16 1032
dr-xr-xr-x. 9 root root 0 Dec 6 13:16 11
dr-xr-xr-x. 9 root root 0 Dec 6 13:16 12
dr-xr-xr-x. 9 root root 0 Dec 6 13:16 13
dr-xr-xr-x. 9 root root 0 Dec 6 13:16 133
dr-xr-xr-x. 9 root root 0 Dec 18 10:26 1344556
dr-xr-xr-x. 9 root root 0 Dec 18 10:26 1344565
dr-xr-xr-x. 9 root root 0 Dec 18 10:26 1344720

...

여기에 숫자로 돼 있는 파일들은 실제 PID(Process ID)를 가리킨다.


Process 상태 확인

EC2 인스턴스에서 실행 중인 Docker 컨테이너를 간단히 확인해보자.

$ for i in $(docker container ls --format "{{.ID}}"); do docker inspect -f '{{.State.Pid}} {{.Name}}' $i; done

또는

$ docker ps

# Get docker process hash

$ docker inspect <PROCESS_HASH>

위 명령어로 실행 중인 Docker Container의 Process ID를 확인한다. 그런 다음, 다음 명령어로 프로세스의 상태를 확인할 수 있다.

$ cat /proc/<DOCKER_CONTAINER_PID>/status

State: S (sleeping)

...

그럼 위와 같이 S (sleeping) 상태로 event나 resource를 대기하고 있는 것을 확인할 수 있다. 만약 어떤 작업을 진행 중이라면 (ex. Client로부터의 Request 처리) R (running) 상태로 바뀐다.


Process 메모리 확인

마찬가지로 PID로부터 상세한 가상 메모리 정보를 확인할 수 있다.

$ cat /proc/<DOCKER_CONTAINER_PID>/maps

...

563509ae8000-563509ae9000 ---p 00000000 00:00 0 [heap]
563509ae9000-563509afd000 rw-p 00000000 00:00 0 [heap]

...

여기 이 두 라인을 주목해서 보면 heap이라는 메모리 공간에 할당된 것을 확인할 수 있다.

addresspermsoffsetdevinodepathname
563509ae8000-563509ae9000---p0000000000:000[heap]
563509ae9000-563509afd000rw-p0000000000:000[heap]

여기에서 메모리 주소(가상 메모리)를 보면, 16진수로 메모리 주소가 표시된 것을 확인할 수 있다.

address에 해당하는 값은 563509ae8000-563509ae9000의 시작


CPU 정보 확인

/proc/cpuinfo라는 가상 파일은 현재 시스템에서 사용 중인 프로세서의 유형을 알려준다.

$ cat /proc/cpuinfo
Related Links