描述

有些时候Docker集群项目出现问题,需要快速查找问题所在,这种时候首先就需要查看Docker的各个容器是否有资源使用不正常的情况


操作方法

使用docker stats 命令用来显示容器使用的系统资源。

1
docker stats

默认输出

1
2
3
4
5
6
CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
d7ef5139ea28 0.10% 273.3 MiB / 1.796 GiB 14.86% 302 MB / 305 MB 269 MB / 0 B 29
083e9f44bf1b 0.00% 5.859 MiB / 1.796 GiB 0.32% 3.05 GB / 3.07 GB 339 MB / 0 B 9
996236181fa3 0.50% 11.79 MiB / 1.796 GiB 0.64% 3.39 GB / 4.04 GB 183 MB / 0 B 9
1b610486dbcf 0.00% 43.05 MiB / 1.796 GiB 2.34% 1.33 GB / 488 MB 21.3 GB / 248 MB 16
3934362529c3 0.03% 280.1 MiB / 1.796 GiB 15.23% 567 MB / 1.16 GB 6.91 GB / 517 MB 39

可以看到输出上面内容的情况下,会每隔1秒钟刷新一次输出的内容。按下 Ctrl+C 可以结束。下面是输出的内容的说明:

  • [CONTAINER]:以短格式显示容器的 ID。
  • [CPU %]:CPU 的使用情况。
  • [MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。
  • [MEM %]:以百分比的形式显示内存使用情况。
  • [NET I/O]:网络 I/O 数据。
  • [BLOCK I/O]:磁盘 I/O 数据。
  • [PIDS]:PID 号。

如果只需要查看当时状态,可以使用--no-stream,输出之后命令行会自动结束

1
docker stats --no-stream

很明显按照上面这种情况,如果容器太多了,我们很难去对应是输出的哪一个容器的信息。这个时候就需要使用--format将返回结果按照自己需要的内容输出

1
docker stats --format "table {{.Container}}\t{{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}\t{{.BlockIO}}\t{{.MemPerc}}\t{{.PIDs}}"

这样就能很容易的对应自己设置容器名称

1
2
3
4
5
6
CONTAINER           NAME                CPU %               MEM USAGE / LIMIT       NET I/O             BLOCK I/O           MEM %               PIDS
d7ef5139ea28 blog 0.12% 273.3 MiB / 1.796 GiB 304 MB / 306 MB 269 MB / 0 B 14.86% 29
083e9f44bf1b v2ray-usa 0.00% 5.977 MiB / 1.796 GiB 3.05 GB / 3.07 GB 339 MB / 0 B 0.32% 9
996236181fa3 v2ray 0.40% 11.8 MiB / 1.796 GiB 3.41 GB / 4.06 GB 183 MB / 0 B 0.64% 9
1b610486dbcf gogs 0.00% 43.02 MiB / 1.796 GiB 1.33 GB / 488 MB 21.3 GB / 248 MB 2.34% 16
3934362529c3 mysql 0.04% 280.1 MiB / 1.796 GiB 567 MB / 1.16 GB 6.91 GB / 517 MB 15.23% 39

下面是--format可自定义的占位符

符号 说明
.Container 容器的名称或 ID
.Name 容器名称
.ID 容器 ID
.CPUPerc CPU 使用率
.MemUsage 内存使用量
.NetIO 网络 I/O
.BlockIO 磁盘 I/O
.MemPerc 内存使用率
.PIDs PID 号

有些时候为了方便处理,也可以将--format按照json格式输出

1
docker stats --no-stream --format "{\"container\":\"{{ .Container }}\",\"memory\":{\"raw\":\"{{ .MemUsage }}\",\"percent\":\"{{ .MemPerc }}\"},\"cpu\":\"{{ .CPUPerc }}\"}"
1
2
3
4
5
{"container":"d7ef5139ea28","memory":{"raw":"273.3 MiB / 1.796 GiB","percent":"14.86%"},"cpu":"0.10%"}
{"container":"083e9f44bf1b","memory":{"raw":"6.078 MiB / 1.796 GiB","percent":"0.33%"},"cpu":"0.00%"}
{"container":"996236181fa3","memory":{"raw":"11.88 MiB / 1.796 GiB","percent":"0.65%"},"cpu":"0.31%"}
{"container":"1b610486dbcf","memory":{"raw":"42.93 MiB / 1.796 GiB","percent":"2.33%"},"cpu":"0.00%"}
{"container":"3934362529c3","memory":{"raw":"280.1 MiB / 1.796 GiB","percent":"15.23%"},"cpu":"0.04%"}