飞道的博客

【云原生】监视Docker桌面的容器内存和CPU使用情况

432人阅读  评论(0)

目录

一、如何监视Docker桌面的容器内存和CPU使用情况

1、stats命令

2、Docker 统计命令stats是如何工作的

2.1、命令与描述

2.2、OPTIONS

2.3、例子

2.4、格式化

3、满足资源使用扩展

4、如何安装“资源使用情况”扩展插件?

5、总结


一、如何监视Docker桌面的容器内存和CPU使用情况

1、stats命令

    Docker 有一个内置的 stats 命令,可以简单地查看容器正在使用的资源量。只要在 CLI 中添加 $docker 统计信息,就可以读取所有运行容器的 CPU内存网络磁盘使用情况。

    但是这个命令只能给你当前的时刻。如果希望看到资源随着时间的推移而演变,那么该怎么办?或者查看 DockerCompose 项目使用了多少 CPU 和内存?或者根据 CPU 密集程度最高的容器进行排序,然后根据超过80% 的 CPU 使用情况进行筛选?

    通过资源使用扩展,可以更清楚地了解自己的使用情况,并能够分析数据以获得更好的见解。下面来看看它是如何工作的。

2、Docker 统计命令stats是如何工作的

使用 Docker 的 stats 命令,可以实时查看容器使用的资源。使用这个工具可以分析每个运行的容器,以确定它的 CPU、内存、网络和磁盘利用率。

要使用这个命令,打开一个终端并运行 docker stats 命令:


   
  1. $ docker stats
  2. CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
  3. redis1 0.07 % 796 KB / 64 MB 1.21% 788 B / 648 B 3.568 MB / 512 KB
  4. redis2 0.07 % 2.746 MB / 64 MB 4.29% 1.266 KB / 648 B 12.4 MB / 0 B

Docker stats 是一个有用的命令,它提供有关容器在给定时间点正在使用的资源的信息。但仅此而已。在这个扩展之前,如果希望在一段时间内将信息串联在一起,那么需要使用相当手动的 ping 和数据整合过程。

2.1、命令与描述

 docker stats [OPTIONS] [CONTAINER...]

Docker stats 命令返回用于运行容器的实时数据流。若要将数据限制为一个或多个特定容器,请指定由空格分隔的容器名称或 id 列表。可以指定一个已停止的容器,但是已停止的容器不返回任何数据。

如果需要有关容器资源使用情况的更详细信息,请使用/Container/(id)/stats API 端点。

注意:

  • 在 Linux 上,Docker CLI 通过从总内存使用量中减去缓存使用量来报告内存使用量。API 不执行这样的计算,而是提供总内存使用量和缓存的数量,以便客户机可以根据需要使用数据。缓存使用量定义为 cgroup v1 hosts。在Docker 19.03及以上版本的 memy.stat 文件中 total _ inactive _ file 字段的值。在 cgroup v2主机上,缓存使用量定义为 inactive _ file 字段的值。
  • PIDS 列包含由该容器创建的进程和内核线程的数量。线程是 Linux 内核使用的术语。其他等价术语是“轻量级进程”或“内核任务”等等。PIDS 列中的大量进程和少量进程(如 ps 或 top 所报告的)可能表明容器中的某些东西正在创建许多线程。

2.2、OPTIONS

名字,速记 默认 描述
--all , -a 显示所有容器(默认显示正在运行)
--format 使用 Go 模板漂亮打印图像
--no-stream 禁用流统计信息,只拉取第一个结果
--no-trunc 不截断输出

2.3、例子

针对 Linux 守护进程在所有运行的容器上运行 docker 统计信息。


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

如果不使用—— format 指定格式字符串,则显示以下列

列名 描述
CONTAINER ID and Name  

容器的 ID 和名称

CPU % and MEM % 容器正在使用的主机 CPU 和内存的百分比
MEM USAGE / LIMIT  

容器正在使用的内存总量,以及允许使用的内存总量

NET I/O 容器通过其网络接口发送和接收的数据量
BLOCK I/O  

容器从主机上的块设备读取和写入的数据量

PIDs 容器创建的进程或线程的数量

针对 Linux 守护进程按名称和 id 在多个容器上运行 docker 统计信息


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

在名为 nginx 的容器上运行 docker stats 并获得 json 格式的输出


  
  1. $ docker stats nginx --no-stream --format "{{ json . }}"
  2. { "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 统计信息


  
  1. docker stats --all --format "table {{.Container}} \t {{.CPUPerc}} \t {{.MemUsage}} " fervent_panini 5acfcb1b4fd1 drunk_visvesvaraya big_heisenberg
  2. CONTAINER CPU % MEM USAGE / LIMIT
  3. fervent_panini 0.00% 56KiB / 15.57GiB
  4. 5acfcb1b4fd1 0.07% 32.86MiB / 15.57GiB
  5. drunk_visvesvaraya 0.00% 0B / 0B
  6. big_heisenberg 0.00% 0B / 0B

在上面的例子中,drink _ visvesvaraya 和 big _ heisenberg 是被阻止的容器

针对 Windows 守护进程在所有运行的容器上运行 docker 统计信息


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

针对 Windows 守护进程按名称和 id 在多个容器上运行 docker 统计信息


  
  1. PS E:\> docker ps -a
  2. CONTAINER ID NAME IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 3f214c61ad1d awesome_brattain nanoserver "cmd" 2 minutes ago Up 2 minutes big_minsky
  4. 9db7aa4d986d mad_wilson windowsservercore "cmd" 2 minutes ago Up 2 minutes mad_wilson
  5. 09d3bb5b1604 fervent_panini windowsservercore "cmd" 2 minutes ago Up 2 minutes affectionate_easley
  6. PS E:\> docker stats 3f214c61ad1d mad_wilson
  7. CONTAINER ID NAME CPU % PRIV WORKING SET NET I/O BLOCK I/O
  8. 3f214c61ad1d awesome_brattain 0.00 % 46.25 MiB 76.3 kB / 7.92 kB 10.3 MB / 14.7 MB
  9. 9db7aa4d986d mad_wilson 9.59 % 40.09 MiB 27.6 kB / 8.81 kB 17 MB / 20.1 MB

2.4、格式化

格式化选项(—— format)使用 Go 模板打印容器输出。

Go 模板的有效占位符如下:

占位 描述
.Container  

容器名称或 ID (用户输入)

.Name 容器名称
.ID 容器ID
.CPUPerc  

CPU 百分比

.MemUsage 内存使用情况
.NetIO 网络 IO
.BlockIO  

阻断 IO

.MemPerc 内存百分比(Windows 上不可用)
.PIDs  

PID 数量(Windows 上不可用)

当使用—— format 选项时,stats 命令要么输出与模板声明的完全一样的数据,要么在使用 table 指令时也包含列标题。

下面的示例使用一个没有标题的模板,并输出所有图像的 Container 和 CPUPerc 条目,这两个条目用冒号(:)分隔:


  
  1. $ docker stats --format " {{.Container}} : {{.CPUPerc}} "
  2. 09d3bb5b1604: 6.61%
  3. 9db7aa4d986d: 9.19%
  4. 3f214c61ad1d: 0.00%

要以表格格式列出所有容器的名称、 CPU 百分比和内存使用情况的统计信息,可以使用:


  
  1. $ docker stats --format "table {{.Container}} \t {{.CPUPerc}} \t {{.MemUsage}} "
  2. CONTAINER CPU % PRIV WORKING SET
  3. 1285939c1fd3 0.07% 796 KiB / 64 MiB
  4. 9c76f7834ae2 0.07% 2.746 MiB / 64 MiB
  5. d1ea048f04e4 0.03% 4.583 MiB / 64 MiB

默认格式如下:

在 Linux 上:


  
  1. "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}}"

3、满足资源使用扩展

 Resource Use 扩展通过运行 Docker stats 命令,然后将数据编译到用户界面,显示哪些容器在其开发计算机上消耗的资源最多。

使用资源使用扩展,可以快速:

  • 分析最耗资源的容器或 Docker Compose 项目。
  • 观察容器的资源使用是如何随时间变化的。
  • 查看容器使用了多少 CPU、内存、网络和磁盘空间。

插件顶部的卡片可以让你快速浏览所使用的资源:

  • CPU 核心使用率
  • 内存使用情况
  • 运行中的容器

Table 视图显示了容器的详细信息。通过选择要显示的列和要筛选的值,可以自定义视图。以下是可供选择的栏目:

  • NAME – 容器名称
  • STATUS – 容器状态 (运行中或关闭)
  • CPU (%) 容器使用的主机 CPU 和内存的百分比
  • MEM (%) – 超出允许使用的总限制的内存使用量
  • DISK READ/WRITE - 容器从主机上的块设备读取和写入的数据量
  • NETWORK I/O –  容器通过其网络接口发送和接收的数据量
  • PIDs – 容器创建的进程或线程的数量

Chart 视图提供了随时间变化的使用情况的可视化表示。

4、如何安装“资源使用情况”扩展插件?

资源使用扩展插件可以在 Docker Hub 上使用,也可以在 Docker 桌面的扩展插件下使用。

5、总结

    Docker 有一个内置的 stats 命令,可以简单地查看容器正在使用的资源量。只要在 CLI 中添加 $docker 统计信息,就可以读取所有运行容器的 CPU内存网络磁盘使用情况。

    资源使用扩展可以帮助你深入了解容器是如何使用资源的,从而使优化容器变得更加容易和简单。如果你还没有尝试过 Docker 扩展,去扩展市场看看,安装一些吧!它们通过新的工具扩展了 Docker 桌面功能,比如回收 Docker 使用的磁盘空间、浏览日志或备份、恢复和共享卷的功能。甚至可以为所有操作系统创建自己的 Docker 扩展,包括 Windows、 WSL2、 macOS (包括 Intel 和 Apple Silicon)和 Linux。


转载:https://blog.csdn.net/qq_57756904/article/details/128306352
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场