docker cpu使用率如何计算?


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

QQ截图20160613163741.jpg


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

QQ截图20160613163939.jpg

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

已邀请:

逍遥旋风腿

赞同来自:


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

Demon

赞同来自:


在线急等!

styshoo

赞同来自:


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

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

calculateCPUPercentUnix的实现:

<pre>

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) <span> float64(len(v.CPUStats.CPUUsage.PercpuUsage)) <span> 100.0
}
return cpuPercent
}
</pre>

pumpkin

赞同来自:


可不可以理解为Delta是现在的total - 之前的(pre) total usage
然后单个容器的Delta / 系统的 Delta * cpu个数 就是利用率?

要回复问题请先登录注册