docker cpu使用率如何计算?


因业务需求想自己实现docker监控,于是采用标准api,获取到得到cpu部分数据是这样的:

QQ截图20160613163741.jpg


但是不知道如何计算cpu使用率。使用docker stats 显示的是如下图:

QQ截图20160613163939.jpg

命令行里的cpu使用率0.07%是如何计算的,求指教!

已邀请:

逍遥旋风腿

赞同来自:


同样想知道?有结果了吗?

Demon

赞同来自:


在线急等!

styshoo

赞同来自:


源码中的解析是这样实现的,源码如下:

v                 *types.StatsJSON
response, err := cli.ContainerStats(ctx, s.Container, streamStats)
dec := json.NewDecoder(response.Body)
if err := dec.Decode(&v); err != nil {

previousCPU = v.PreCPUStats.CPUUsage.TotalUsage
previousSystem = v.PreCPUStats.SystemUsage
cpuPercent = calculateCPUPercentUnix(previousCPU, previousSystem, v)


calculateCPUPercentUnix的实现:

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)
)

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

要回复问题请先登录注册