Загрузка ЦП контейнера Docker иногда превышает 100% при потоковой передаче из "статистики Docker" - PullRequest
0 голосов
/ 15 ноября 2018

Статистика контейнера Docker превышает 100% при использовании docker stats как это возможно? Разве максимальный процессор не должен быть <= 100? </p>

Аналогичный вывод:

$ 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% 

Мой вариант использования заключается в том, что я пытаюсь найти максимальное использование, которое контейнер может получить от ЦП текущего хоста с открытым исходным кодом.

Если результат отчета находится на подсчете доступных ядер. Будет ли максимум 400%, если у меня 4-х поточный процессор? или 200% потому что у меня только 2 ядра?

1 Ответ

0 голосов
/ 15 ноября 2018

Это потому, что вы можете иметь более одного ядра ЦП, что вполне вероятно. 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, который вы использовали в своем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...