0.0 { cpuPercent = (cpu-6ren">
gpt4 book ai didi

从 "docker stats"流式传输时,Docker 容器 CPU 使用率有时会超过 100%

转载 作者:行者123 更新时间:2023-12-02 18:52:49 27 4
gpt4 key购买 nike

使用 docker stats 时 Docker 容器统计超过 100%这怎么可能?最大CPU不应该<= 100吗?

类似的输出:

$ docker stats

CONTAINER ID NAME CPU %
b95a83497c91 awesome_brattain 152.28%
67b2525d8ad1 foobar 0.00%
e5c383697914 test-1951.1.kay7x1lh1twk9c0oig50sd5tr 0.00%
4bda148efbc0 random.1.vnc8on831idyr42slu578u3cr 0.00%

我的用例是我试图找到容器可以从当前裸机主机的 CPU 中获取的最大使用量。

如果报告结果是关于可用内核的计数。如果我有 4 线程 CPU,最大值会是 400% 吗?还是 200% 因为我只有 2 个内核?

最佳答案

这是因为您可以拥有多个 CPU 内核,很可能就是这种情况。
100% CPU 意味着一个核心完全被占用。

编辑:虽然我没有找到很好的引用,但我深入研究了源代码:

func calculateCPUPercentUnix(previousCPU, previousSystem uint64, v *types.StatsJSON) float64 {
var (
cpuPercent = 0.0
// calculate the change for the cpu usage of the container in between readings
cpuDelta = float64(v.CPUStats.CPUUsage.TotalUsage) - float64(previousCPU)
// calculate the change for the entire system between readings
systemDelta = float64(v.CPUStats.SystemUsage) - float64(previousSystem)
onlineCPUs = float64(v.CPUStats.OnlineCPUs)
)

if onlineCPUs == 0.0 {
onlineCPUs = float64(len(v.CPUStats.CPUUsage.PercpuUsage))
}
if systemDelta > 0.0 && cpuDelta > 0.0 {
cpuPercent = (cpuDelta / systemDelta) * onlineCPUs * 100.0
}
return cpuPercent
}

https://github.com/docker/docker-ce/blob/master/components/cli/cli/command/container/stats_helpers.go#L181

这是您在示例中使用的 CLI 统计工具使用的代码。

关于从 "docker stats"流式传输时,Docker 容器 CPU 使用率有时会超过 100%,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53322102/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com