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
이라는 메모리 공간에 할당된 것을 확인할 수 있다.
address | perms | offset | dev | inode | pathname |
---|---|---|---|---|---|
563509ae8000-563509ae9000 | ---p | 00000000 | 00:00 | 0 | [heap] |
563509ae9000-563509afd000 | rw-p | 00000000 | 00:00 | 0 | [heap] |
여기에서 메모리 주소(가상 메모리)를 보면, 16진수로 메모리 주소가 표시된 것을 확인할 수 있다.
address에 해당하는 값은 563509ae8000-563509ae9000
의 시작
CPU 정보 확인
/proc/cpuinfo
라는 가상 파일은 현재 시스템에서 사용 중인 프로세서의 유형을 알려준다.
$ cat /proc/cpuinfo