我是cgroups的新手,并尝试使用cgroup获取容器统计信息。以前我使用的是docker stats
,但也尝试使用cgroups
收集类似的指标。
在docker stats中,cpu stats部分如下所示:
"cpu_usage": {
"total_usage": 27120642519,
"percpu_usage": [27120642519],
"usage_in_kernelmode": 4550000000,
"usage_in_usermode": 19140000000
},
"system_cpu_usage": 42803030000000,
并且,cpu%指标使用以下等式计算:
cpuDelta = float64(v.CpuStats.CpuUsage.TotalUsage - previousCPU)
systemDelta = float64(v.CpuStats.SystemUsage - previousSystem)
cpuPct = cpuDelta/systemDelta
我正在寻找cgroup来收集systemUsage
和totalUsage
,但它似乎没有类似的指标:
cgroups有一个伪文件cpuacct.stats,它有user
和system
个刻度,但这些只与usage_in_user_mode
中的usage_in_kernel_mode
和docker stats
匹配输出
和cpuacct.usage_per_cpu伪文件具有每个cpu的使用量,它与上面的docker stats输出中的total_usage
匹配。
$cat cpuacct.stat
user 1914
system 455
$cat cpuacct.usage_percpu
27120642519
但是,我找不到任何方法来弄清楚如何从cgroups收集“systemUsage”。
任何线索都会有很大的帮助!
谢谢!
答案 0 :(得分:3)
你的问题的答案并不在于cgroups。请参考下面提到的要点:
String url = (String) getIntent().getExtras().get(KEY);
回到问题: 如何通过docker计算系统CPU?
要计算系统CPU使用率,docker使用" / proc / stat"由POSIX定义。它查找CPU统计信息行,然后汇总提供的前七个字段。为执行所需步骤而编写的golang代码如下所述。
[IIF(<frxDBDataSet1."IDPAY"> = 'NE', 'NIBUNG ESTATE', 'SARANG ESTATE')]
请匹配&#34; system_cpu_usage&#34; docker stats API与下面提到的命令输出确认:
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
}