本页内容

  • 环境要求
  • 如何监控和查看 Docker 容器的 CPU 与内存占用
  • 通过伪文件查看 Docker 容器资源占用
  • 总结

Docker 是当下最流行且被广泛使用的容器化平台之一,用于构建、共享和运行应用程序。当今,大多数应用都部署在容器化平台上,因此管理 Docker 容器是任何系统管理员的核心任务。Docker 允许你查看并监控 Docker 容器的资源占用情况,例如 CPU 和 Memory 使用率。

本教程将向你展示如何查看 Docker 容器的 CPU 和 RAM 占用情况。

环境要求

  • 一台已安装 Docker 的 Linux 服务器。
  • 服务器已配置 root 密码。

如何监控和查看 Docker 容器的 CPU 与内存占用

Docker 提供一个 stats 子命令,可用于查看正在运行的 Docker 容器的 Memory 和 CPU 使用率。

要列出所有 docker stats 命令,请运行以下命令。

docker stats --help

你将看到如下输出。

Usage:  docker stats [OPTIONS] [CONTAINER...]

Display a live stream of container(s) resource usage statistics

Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Pretty-print images using a Go template
      --no-stream       Disable streaming stats and only pull the first result
      --no-trunc        Do not truncate output

现在,让我们运行 docker stats 命令来查看所有正在运行容器的状态:

docker stats

你将在以下输出中看到所有正在运行容器的信息。

CONTAINER ID   NAME                  CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O     PIDS
cb40a0f56aba   determined_robinson   0.00%     2.648MiB / 3.839GiB   0.07%     726B / 0B         0B / 12.3kB   3
e0ee5b16c93f   portainer             0.84%     24.6MiB / 3.839GiB    0.63%     1.02MB / 4.35MB   0B / 721kB    5

默认情况下,docker stats 命令会显示所有容器状态的实时数据流。如果你想查看所有正在运行容器的首次状态,请使用 --no-stream 参数。

docker stats --no-stream

你将看到如下输出。

CONTAINER ID   NAME                  CPU %     MEM USAGE / LIMIT     MEM %     NET I/O           BLOCK I/O     PIDS
cb40a0f56aba   determined_robinson   0.00%     2.648MiB / 3.839GiB   0.07%     796B / 0B         0B / 57.3kB   3
e0ee5b16c93f   portainer             0.00%     25.5MiB / 3.839GiB    0.65%     1.03MB / 4.35MB   0B / 721kB    5

默认情况下,docker stats 命令只显示正在运行容器的状态。如果你想同时显示运行中与已停止容器的状态,请使用 -a 参数:

docker stats --no-stream -a

如果你想查看某个特定容器的状态,请在 docker stats 命令后附加容器 ID。

docker stats cb40a0f56aba

你将看到如下输出。

CONTAINER ID   NAME                  CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O     PIDS
cb40a0f56aba   determined_robinson   0.00%     2.648MiB / 3.839GiB   0.07%     796B / 0B   0B / 57.3kB   3

运行以下命令,仅显示所有正在运行容器的 CPU 信息。

docker stats --format "{{.Container}} {{.CPUPerc}}" --no-stream

输出。

cb40a0f56aba 0.00%
e0ee5b16c93f 0.00%

运行以下命令,仅显示所有正在运行容器的 CPU 和 Memory 信息。

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

输出。

CONTAINER      CPU %     MEM %
cb40a0f56aba   0.00%     0.07%
e0ee5b16c93f   0.10%     0.59%

通过伪文件查看 Docker 容器资源占用

你也可以从位于 Docker 容器宿主机 /sys/fs/cgroup 目录下的控制组(control groups)中查看 Docker 容器的各项指标。

首先,使用以下命令获取所有正在运行的容器 ID。

docker ps --no-trunc --format "{{.Names}}\t{{.ID}}"

你将看到如下输出。

determined_robinson	cb40a0f56aba8b3a29513dafa7622f8d5d6435c9302dc6a3db73ea5eca506af5
portainer	e0ee5b16c93f358a15dfcb93cc80d2c2d1c1c675e7b65e41434ce20f08773465

接下来,运行以下命令获取第二个容器的状态。

cat /sys/fs/cgroup/system.slice/docker-e0ee5b16c93f358a15dfcb93cc80d2c2d1c1c675e7b65e41434ce20f08773465.scope/cpu.stat

你将在以下输出中看到该容器的指标。

usage_usec 1550758
user_usec 1301875
system_usec 248883
nr_periods 0
nr_throttled 0
throttled_usec 0

总结

在本文中,我们向你展示了如何通过命令行查看 Docker 容器的 CPU 和 Memory 占用。希望这能帮助你监控自己的 Docker 环境。如有任何疑问,欢迎随时向我提问。