Docker CPU 百分比

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

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

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}'

谢谢您的回复,但是这并没有像我预期的那样起作用。它只是让获取单个CPU百分比变得更加复杂,并且从外部观察容器。它将使用情况保存在我必须通过容器并提取CPU的axibase容器中的某个地方。难道没有一种简单的方法可以在容器本身中获取CPU百分比,就像docker stats所做的那样吗? - secret
公平地说,Docker状态控制台在主机级别收集所选容器的CPU使用情况,对吗?它只是没有将其存储在任何数据库中,但仍然无法从容器内部获取这些统计信息。您是否愿意采用测量容器CPU使用率的想法,即所有运行在容器内部的进程的总CPU使用率? - Sergei Rodionov
是的,我想要容器的总 CPU 使用率,而不是逐个进程的使用率。 - secret
这是一个打印容器内所有运行进程总CPU使用率的一行代码:top -b -n 1 | tail -n +8 | awk '{s+=$9} END {print s}'我只在Ubuntu 14上测试过,所以准备好根据你的发行版进行更改。 - Sergei Rodionov
谢谢,这可能会有所帮助。 - secret

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

获取其子进程 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 百分比的最“准确”值。

graphana-cadvisor-top-ptree-docker


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接