docker stats DOCKER_ID
显示了我需要的百分比,但我需要它作为变量。我需要在容器内部获取CPU使用率并对其进行一些操作。我已经研究了不同的东西,如cgroup和docker rest API,但它们并不提供CPU使用率。如果有一种方法可以在容器内部获取CPU使用率而不是在外部获取,那将是完美的。我在下面的链接中找到了一个由某人提供的解决方案,但它仍然在容器外部通过rest api,但是我真的不知道如何计算百分比。
docker stats DOCKER_ID
显示了我需要的百分比,但我需要它作为变量。我需要在容器内部获取CPU使用率并对其进行一些操作。我已经研究了不同的东西,如cgroup和docker rest API,但它们并不提供CPU使用率。如果有一种方法可以在容器内部获取CPU使用率而不是在外部获取,那将是完美的。我在下面的链接中找到了一个由某人提供的解决方案,但它仍然在容器外部通过rest api,但是我真的不知道如何计算百分比。
您可以使用Axibase时间序列数据库存储驱动程序安装Google cAdvisor。它将收集和存储以核单位和百分比测量的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 '$1 == "PID" {block_num++; next} block_num == 2 {sum += $9;} END {print sum}'
我使用了ctop,它提供了比docker_stats更图形化的方式。但是我发现它显示的CPU百分比比系统上Top显示的要高得多。基本上它是相对于根进程来显示的。Docker容器作为子进程运行。
举个例子说明:
首先找到所有容器运行的根进程
docker-containerd-shim - ..Docker架构分为四个组件:Docker引擎、containerd、containerd-shm和runC。这些二进制文件分别称为docker、docker-containerd、docker-containerd-shim和docker-runc。 - 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
您可以使用以下命令查看所有正在运行的容器:
pstree -p 1918
现在假设我们有兴趣查看 fluentdb 的 CPU 消耗情况。
获取其子进程 ID 的简单方法是:
pstree -p 1918 |grep fluentd
这将返回 21670。
现在,您可以运行 top -p 21670
来查看此子进程的 CPU 占用率,也可以运行 top -p 1918
来查看父进程的总体 CPU 占用率。
通过 cadvisor 收集到 Promethus 并在 Grafana 中查看,这是与主机机器相关的容器实际 CPU 百分比的最接近和最准确的表示。下图说明了这一点。cTop 和 docker stats 显示的 CPU 百分比为 23%。docker 父进程的实际 CPU 百分比约为 2%,而来自 Grafana 的 cAdvisor 输出显示了与主机相关的容器 CPU 百分比的最“准确”值。