Dan*_*nna 22 containers cpu-usage lxc docker
Docker提供了一个交互式stats命令,docker stats [cid]
它提供了有关CPU使用情况的最新信息,如下所示:
CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O
36e8a65d 0.03% 4.086 MiB/7.798 GiB 0.05% 281.3 MiB/288.3 MiB
Run Code Online (Sandbox Code Playgroud)
我试图以可消化的格式将CPU使用率作为百分比来进行一些分析.
我已经看到/ sys/fs中的统计信息似乎提供了与Docker Remote API类似的值,它给了我这个JSON blob:
{
"cpu_usage": {
"usage_in_usermode": 345230000000,
"total_usage": 430576697133,
"percpu_usage": [
112999686856,
106377031910,
113291361597,
97908616770
],
"usage_in_kernelmode": 80670000000
},
"system_cpu_usage": 440576670000000,
"throttling_data": {
"throttled_time": 0,
"periods": 0,
"throttled_periods": 0
}
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何从中获得精确的CPU使用率百分比.
有任何想法吗?
Mic*_*ael 31
如果您打算使用Stats API调用 - 您可以查看docker客户端如何执行此操作: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
}
Run Code Online (Sandbox Code Playgroud)
基本上,你拿一个参考点,然后看10秒的差异,你就可以知道容器使用了多少时间.比如说,我们从容器的0 SystemCPUUsage和0 CPUUsage开始.如果在10秒后,我们有10个SystemCPUUsage和1个CPUUsage,那么我们有10%的使用率.您只是在API中以纳秒而非秒为结果.实际时间无关紧要,SystemCPUUsage的总变化才是最重要的,然后将CPUUSage与之比较.
在我们使用远程api后,我们得到以下字段:precpu_stats/cpu_stats
那么,基本上这里是代码:(javascript示例)
var res <---- remote api response
var cpuDelta = res.cpu_stats.cpu_usage.total_usage - res.precpu_stats.cpu_usage.total_usage;
var systemDelta = res.cpu_stats.system_cpu_usage - res.precpu_stats.system_cpu_usage;
var RESULT_CPU_USAGE = cpuDelta / systemDelta * 100;
Run Code Online (Sandbox Code Playgroud)
只是为了澄清RESULT_CPU_USAGE ......它是物理硬件消耗的资源量,所以假设你得到RESULT_CPU_USAGE为50%,这意味着容器X正在使用所有PC电源的50%
归档时间: |
|
查看次数: |
19696 次 |
最近记录: |