Docker CPU 百分比

Docker CPU percentage

有什么方法可以在 docker 容器内而不是容器外获得 cpu 百分比?! docker stats DOCKER_ID 显示的百分比正是我所需要的,但我需要它作为变量。我需要在容器本身内获取 cpu 百分比并对其进行一些操作。 我研究了不同的东西,例如 cgroup 和 docker rest API,但它们不提供 cpu 百分比。如果有办法在容器内而不是在容器外获得 cpu 百分比,那将是完美的。我在下面 link 中找到了某人提供的一个解决方案,其余 api 仍然在容器之外,但是我并没有真正了解如何计算百分比。

Get Docker Container CPU Usage as Percentage

您可以安装 Google cAdvisor 和 Axibase 时间序列数据库存储驱动程序。它将收集和存储 CPU 以核心单位和百分比衡量的利用率。

包含如何报告 CPU 的示例的屏幕截图位于页面底部:https://axibase.com/products/axibase-time-series-database/writing-data/docker-cadvisor/

在集中式配置中,ATSD 容器本身可以从安装在多个 docker 主机上的多个 cAdvisor 实例获取指标。

编辑 1:用于计算容器内所有进程 运行 的总 CPU 使用情况的一个班轮。调整 -d 参数以更改样本之间的间隔以平滑尖峰:

top -b -d 5 -n 2 | awk ' == "PID" {block_num++; next} block_num == 2 {sum += ;} END {print sum}'

我使用了 ctop,它提供了比 docker_stats 更图形化的方式 但我发现它显示的 CPU 百分比比 Top 为系统显示的百分比高得多。基本上它是相对于根进程显示的。 Docker 容器 运行 作为子进程

举例说明

先找到所有容器所在的root进程运行

docker-containerd-shim - ..Docker 架构分为四个组件:Docker 引擎、containerd、containerd-shm 和 运行C。二进制文件分别称为 docker、docker-containerd、docker-containerd-shim 和 docker-运行c. - https://hackernoon.com/docker-containerd-standalone-runtimes-heres-what-you-should-know-b834ef155426

root 1843 1918 0 Aug31 ? 00:00:00 docker-containerd-shim 611bd9... /var/run/docker/libcontainerd/611bd92.... docker-runc

您可以使用命令

查看所有 运行ning 的容器

pstree -p 1918

现在说我们有兴趣查看 fluentdb 的 CPU 消耗。

获取此子 pid 的简单方法是

pstree -p 1918 |grep fluentd

给出 21670

现在您可以 运行 top -p 21670 查看此子进程的 CPU 份额还 top -p 1918 查看父进程的整体 CPU .

将 cadvisor 收集到 Promethus 并在 Grafana 中查看,这是容器实际使用的 CPU 百分比的最接近和最准确的表示;关于主机。该图说明了这一点。 cTop 和 docker 统计数据显示 CPU 百分比为 23%。 docker 父进程的实际 CPU 百分比约为 2%,Grafana 的 cAdvisor 输出显示与主机相关的容器 CPU 百分比的最大 'accurate' 值。