docker container stats

docker container stats

docker container stats는 컨테이너의 리소스 사용량 통계를 실시간으로 보여 주는 명령이에요. CPU·메모리 같은 리소스 소비를 지켜보고 싶을 때 써요.

출처: 문서

본문

docker stats 명령은 실행 중인 컨테이너에 대한 실시간 데이터 스트림을 반환해요. 데이터를 하나 이상의 특정 컨테이너로 제한하려면 컨테이너 이름이나 ID 목록을 공백으로 구분해 지정해요. 정지된 컨테이너를 지정할 수는 있지만 정지된 컨테이너는 데이터를 반환하지 않아요. 컨테이너의 리소스 사용량에 대한 더 자세한 정보가 필요하면 /containers/(id)/stats API 엔드포인트를 사용해요.

참고: Linux에서 Docker CLI는 총 메모리 사용량에서 캐시 사용량을 빼서 메모리 사용량을 보고해요. API는 그런 계산을 하지 않고 총 메모리 사용량과 캐시의 양을 제공하므로 클라이언트가 필요에 따라 데이터를 쓸 수 있어요. 캐시 사용량은 cgroup v1 호스트에서 memory.stat 파일의 total_inactive_file 필드 값으로 정의돼요. Docker 19.03 이하에서는 캐시 사용량이 cache 필드 값으로 정의됐고, cgroup v2 호스트에서는 캐시 사용량이 inactive_file 필드 값으로 정의돼요.

참고: PIDS 열은 해당 컨테이너가 만든 프로세스와 커널 스레드의 수를 포함해요. Threads는 Linux 커널이 쓰는 용어예요. "lightweight process"나 "kernel task" 같은 동등한 용어도 있어요. PIDS 열의 큰 수와 (pstop이 보고하는) 작은 프로세스 수가 함께 나타나면 컨테이너 안에서 무언가가 많은 스레드를 만들고 있을 가능성이 있어요.

사용법 (Usage)

docker container stats [OPTIONS] [CONTAINER...]

별칭 (Aliases)

별칭은 긴 명령 대신 쓸 수 있는 짧고 기억하기 쉬운 대안이에요.

docker stats

옵션 (Options)

옵션 기본값 설명
-a, --all 모든 컨테이너를 보여 줘요 (기본은 실행 중인 것만)
--format 사용자 지정 템플릿으로 출력 형식을 정해요: table(기본, 열 머리글 있는 테이블), table TEMPLATE(Go 템플릿 사용 테이블), json(JSON), TEMPLATE(Go 템플릿 사용 출력). 템플릿 출력 포맷팅에 대한 자세한 내용은 https://docs.docker.com/go/formatting/ 참고
--no-stream 스트리밍 통계를 끄고 첫 번째 결과만 가져와요
--no-trunc 출력을 자르지 않아요

예제 (Examples)

Linux 데몬에 대해 실행 중인 모든 컨테이너에서 docker stats를 실행한 예시예요.

$ docker stats

CONTAINER ID        NAME                                    CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b95a83497c91        awesome_brattain                        0.28%               5.629MiB / 1.952GiB   0.28%               916B / 0B           147kB / 0B          9
67b2525d8ad1        foobar                                  0.00%               1.727MiB / 1.952GiB   0.09%               2.48kB / 0B         4.11MB / 0B         2
e5c383697914        test-1951.1.kay7x1lh1twk9c0oig50sd5tr   0.00%               196KiB / 1.952GiB     0.01%               71.2kB / 0B         770kB / 0B          1
4bda148efbc0        random.1.vnc8on831idyr42slu578u3cr      0.00%               1.672MiB / 1.952GiB   0.08%               110kB / 0B          578kB / 0B          2

--format으로 형식 문자열을 지정하지 않으면 다음 열이 표시돼요.

열 이름 설명
CONTAINER ID와 Name 컨테이너의 ID와 이름
CPU %와 MEM % 컨테이너가 사용 중인 호스트 CPU·메모리의 백분율
MEM USAGE / LIMIT 컨테이너가 사용 중인 총 메모리와 사용이 허용된 총 메모리
NET I/O 컨테이너가 네트워크 인터페이스를 통해 받고 보낸 데이터 양
BLOCK I/O 컨테이너가 호스트의 블록 디바이스에 쓰고 읽은 데이터 양
PIDs 컨테이너가 만든 프로세스 또는 스레드 수

Linux 데몬에 대해 이름과 ID로 여러 컨테이너에서 docker stats를 실행한 예시예요.

$ docker stats awesome_brattain 67b2525d8ad1

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
b95a83497c91        awesome_brattain    0.28%               5.629MiB / 1.952GiB   0.28%               916B / 0B           147kB / 0B          9
67b2525d8ad1        foobar              0.00%               1.727MiB / 1.952GiB   0.09%               2.48kB / 0B         4.11MB / 0B         2

이름이 nginx인 컨테이너에 docker stats를 실행하고 json 형식으로 출력을 얻은 예시예요.

$ docker stats nginx --no-stream --format "{{ json . }}"
{"BlockIO":"0B / 13.3kB","CPUPerc":"0.03%","Container":"nginx","ID":"ed37317fbf42","MemPerc":"0.24%","MemUsage":"2.352MiB / 982.5MiB","Name":"nginx","NetIO":"539kB / 606kB","PIDs":"2"}

모든(실행 중 및 정지된) 컨테이너에 사용자 지정 형식으로 docker stats를 실행한 예시예요.

$ docker stats --all --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" fervent_panini 5acfcb1b4fd1 humble_visvesvaraya big_heisenberg

CONTAINER                CPU %               MEM USAGE / LIMIT
fervent_panini           0.00%               56KiB / 15.57GiB
5acfcb1b4fd1             0.07%               32.86MiB / 15.57GiB
humble_visvesvaraya      0.00%               0B / 0B
big_heisenberg           0.00%               0B / 0B

위 예제에서 humble_visvesvarayabig_heisenberg는 정지된 컨테이너예요.

Windows 데몬에 대해 실행 중인 모든 컨테이너에서 docker stats를 실행한 예시예요.

PS E:\> docker stats
CONTAINER ID        CPU %               PRIV WORKING SET    NET I/O             BLOCK I/O
09d3bb5b1604        6.61%               38.21 MiB           17.1 kB / 7.73 kB   10.7 MB / 3.57 MB
9db7aa4d986d        9.19%               38.26 MiB           15.2 kB / 7.65 kB   10.6 MB / 3.3 MB
3f214c61ad1d        0.00%               28.64 MiB           64 kB / 6.84 kB     4.42 MB / 6.93 MB

Windows 데몬에 대해 이름과 ID로 여러 컨테이너에서 docker stats를 실행한 예시예요.

PS E:\> docker ps -a
CONTAINER ID        NAME                IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
3f214c61ad1d        awesome_brattain    nanoserver          "cmd"               2 minutes ago       Up 2 minutes                            big_minsky
9db7aa4d986d        mad_wilson          windowsservercore   "cmd"               2 minutes ago       Up 2 minutes                            mad_wilson
09d3bb5b1604        fervent_panini      windowsservercore   "cmd"               2 minutes ago       Up 2 minutes                            affectionate_easley

PS E:\> docker stats 3f214c61ad1d mad_wilson
CONTAINER ID        NAME                CPU %               PRIV WORKING SET    NET I/O             BLOCK I/O
3f214c61ad1d        awesome_brattain    0.00%               46.25 MiB           76.3 kB / 7.92 kB   10.3 MB / 14.7 MB
9db7aa4d986d        mad_wilson          9.59%               40.09 MiB           27.6 kB / 8.81 kB   17 MB / 20.1 MB

출력 형식 지정하기 (--format)

형식 옵션(--format)은 Go 템플릿으로 컨테이너 출력을 pretty-print해요. Go 템플릿의 유효한 자리표시자는 다음과 같아요.

자리표시자 설명
.Container 컨테이너 이름 또는 ID (사용자 입력)
.Name 컨테이너 이름
.ID 컨테이너 ID
.CPUPerc CPU 백분율
.MemUsage 메모리 사용량
.NetIO 네트워크 IO
.BlockIO 블록 IO
.MemPerc 메모리 백분율 (Windows에서는 사용 불가)
.PIDs PID 수 (Windows에서는 사용 불가)

--format 옵션을 쓰면 stats 명령은 템플릿이 선언한 대로 데이터를 정확히 출력하거나, table 지시자를 쓰면 열 머리글도 포함해요. 다음 예제는 머리글이 없는 템플릿을 써서 모든 이미지에 대해 콜론(:)으로 구분된 Container와 CPUPerc 항목을 출력해요.

$ docker stats --format "{{.Container}}: {{.CPUPerc}}"

09d3bb5b1604: 6.61%
9db7aa4d986d: 9.19%
3f214c61ad1d: 0.00%

모든 컨테이너 통계를 이름·CPU 백분율·메모리 사용량과 함께 테이블 형식으로 나열하려면 이렇게 써요.

$ docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"

CONTAINER           CPU %               PRIV WORKING SET
1285939c1fd3        0.07%               796 KiB / 64 MiB
9c76f7834ae2        0.07%               2.746 MiB / 64 MiB
d1ea048f04e4        0.03%               4.583 MiB / 64 MiB

기본 형식은 다음과 같아요.

Linux:

"table {{.ID}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.PIDs}}"

Windows:

"table {{.ID}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}"

더 알아보기 (Learn more)