Docker CPU百分比

有什么办法,我可以得到docker容器内的CPU的百分比,而不是在它之外? docker stats DOCKER_ID显示正是我需要的百分比,但我需要它作为variables。 我需要在容器内部获得cpu的百分比,并对其进行一些操作。 我已经看过不同的东西,如cgroup和dockerrestAPI,但他们不提供CPU百分比。 如果有一种方法可以获得容器内的cpu百分比,而不是外部的将是完美的。 我在下面的链接中find了一个由某人提供的解决scheme,这个解决scheme仍然在其他api的容器之外,但是我没有真正知道如何计算百分比。

获取Docker容器CPU使用率作为百分比

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

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

在集中式configuration中,ATSD容器本身可以从多个Docker主机上安装的多个cAdvisor实例接收指标。

编辑1:一个class轮来计算在容器内运行的所有进程的总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提供更多的graphics方式但是我发现它显示的CPU百分比方式比Top显示的系统要高。 基本上它是相对于根本过程而言的。 Docker容器作为subprocess运行

用一个例子来说明

首先find所有容器运行的根进程

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消耗。

简单的方法来获得这个孩子的PID是

pstree -p 1918 |grep fluentd

这给了21670

现在,您可以运行top -p 21670来查看此subprocess的CPU共享,也是top -p 1918以查看父进程的总体CPU。

当pipe理员收集到Promethus并在Grafana中查看时,这是集装箱使用的实际CPU百分比的最接近和最准确的表示。 关于主机。 这张图解释了这一点。 cTop和docker统计数据占CPU百分比的23%。 Docker父进程的实际CPU百分比大约为2%,而Grafana的cAdvisor输出显示了与主机相关的容器CPU百分比的最“准确”值。

graphana-cadvisor机上ptree中,泊坞窗