Docker CPU百分比

问题描述 投票:3回答:2

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

Get Docker Container CPU Usage as Percentage

docker cpu-usage cgroups
2个回答
0
投票

您可以使用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}'

0
投票

我使用了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消耗。

让孩子了解这个的简单方法是

pstree -p 1918 |grep fluentd

这给出了21670

现在你可以运行top -p 21670来查看这个子进程的CPU份额top -p 1918以查看父进程的整体CPU。

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

graphana-cadvisor-top-ptree-docker

© www.soinside.com 2019 - 2024. All rights reserved.