Get Docker Container CPU Usage as Percentage

前端 未结 3 1667
伪装坚强ぢ
伪装坚强ぢ 2020-12-14 17:10

Docker provides an interactive stats command, docker stats [cid] which gives up to date information on the CPU usage, like so:

CONTAINER      CPU         


        
3条回答
  •  再見小時候
    2020-12-14 17:34

    If you are going to use the Stats API call - you can take a look at how the docker client does it: https://github.com/docker/docker/blob/eb131c5383db8cac633919f82abad86c99bffbe5/cli/command/container/stats_helpers.go#L175-L188

    func calculateCPUPercent(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
    }
    

    Basically, you take a point of reference, then see the difference in say 10 secs, you can then tell how much of the time was used by the container. Say, we start with 0 SystemCPUUsage and 0 CPUUsage for the container. If after 10 secs, we have 10 SystemCPUUsage and 1 CPUUsage, then we have 10% usage. You are just given the results in nanoseconds, not seconds, in the API. The actual time does not matter, the total SystemCPUUsage change is what matters, then compare CPUUSage to that.

提交回复
热议问题