docker stats

読む時間の目安: 4 分

説明

コンテナーのリソース利用統計について、動的なストリーム出力を行います。

利用方法

$ docker stats [オプション] [CONTAINER...]

追加説明

docker statsコマンドは、実行中コンテナーに対する動的なストリームデータを返します。 このデータを特定のコンテナーのみに限定する場合は、コンテナー名またはコンテナー ID を空白で区切って指定します。 停止しているコンテナーを指定することもできますが、停止コンテナーからは何の情報も返されません。

コンテナーのリソース利用状況に関する詳細については API エンドポイント/containers/(id)/statsを利用してください。

メモ

Linux 上の Docker CLI が表示するメモリ使用量は、全メモリ使用量からキャッシュ使用量を差し引いたものです。 API ではそういった計算は行いませんが、クライアントが必要に応じてデータ利用できるように、全メモリ使用量とキャッシュ量は示します。 キャッシュ使用量は cgroup v1 ホスト上のmemory.statファイル内においてtotal_inactive_file項目の値として定義されます。

Docker 19.03 またはそれ以前においてキャッシュ使用量はcache項目の値として定義されていました。 cgroup v2 ホストにおいてキャッシュ使用量はinactive_file項目の値として定義されます。

メモ

PIDSの欄には、そのコンテナーによって生成されたプロセスやカーネルスレッドの数が示されます。 スレッドとは Linux カーネルにおける用語です。 これと同じ用語として「軽量プロセス」(lightweight process)、「カーネルタスク」(kernel task)などと表現されます。 PIDS欄に非常に大きな数値が示されていたら、それはほんのわずかのプロセス数(pstopによって表示されるもの)に加えて、コンテナーから生成される非常に多くのスレッドが含まれているものと考えられます。

本コマンドの利用例については、以下に示す 利用例の節 を参照してください。

オプション

名前/省略形 デフォルト 説明
--all , -a コンテナーすべてを表示します。(デフォルトは実行中コンテナーのみ。)
--format Go 言語テンプレートを使って出力をフォーマットします。
--no-stream 統計情報の自動表示を無効にし、取得された最初の値のみを表示します。
--no-trunc 詳細出力を行います。

利用例

以下では 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 IDName コンテナー名とコンテナー 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

Running docker stats on container with name nginx and getting output in json format.

$ 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 drunk_visvesvaraya big_heisenberg

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

上の例においてdrunk_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)により Go 言語のテンプレートを利用して、コンテナーをわかりやすく出力することができます。

Go 言語テンプレートによるプレースホルダー(placeholder)は以下のとおりです。

プレースホルダー 内容説明
.Container コンテナー名とコンテナーID(ユーザー入力)
.Name コンテナー名
.ID コンテナー ID
.CPUPerc CPU 使用割合
.MemUsage メモリ使用量
.NetIO ネットワーク I/O
.BlockIO ブロック I/O
.MemPerc メモリ使用割合(Windows では利用不可)
.PIDs PID 数(Windows では利用不可)

--formatオプションを利用するとstatsコマンドは、テンプレートが定めるデータを直接出力します。 またtableディレクティブを利用すると、カラムヘッダーも同時に出力されます。

以下は、ヘッダーを含めずにテンプレートを利用する例であり、すべてのイメージにおけるContainerCPUPercの各項目がコロン(:)で区切って表示されます。

$ 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}}"

上位コマンド

コマンド 説明
docker Docker CLI の基本コマンド