如果我有这样一个cgroup中user.slice
,并已CPUAccounting=true
成立了,我不知道怎么一会计算特定cgroup中的CPU占用率在一段时间内(如1秒),即使用cpuacct.usage
或cpuacct.stat
。我知道cpuacct.usage
提供了 CPU 时间(以纳秒为单位),可用于通过在一段时间内减去它的两个快照并将其除以系统在同一时间段内的总 CPU 时间来计算 CPU 百分比(正确我,如果我错了),但我不确定如何获得一段时间内的总 CPU 时间。
有没有办法获得一段时间内的总 CPU 时间或使用不同的公式/cgroup 功能来计算 CPU 使用率?提前致谢 :)
注意:我知道systemd-cgtop
,它提供了一些此类信息,但是我想以编程方式计算 CPU 使用率而无需解析systemd-cgtop
CPU 使用率百分比是 CPU 处于活动状态的总时间与墙上时钟经过时间的比率。如果您尝试将一个 CPU 时间与另一个 CPU 时间进行比较,则这不是使用百分比。这个没有名字,它只是一个 CPU 时间与另一个 CPU 时间的比率。
您已经说过您知道如何获得 CPU 消耗时间(通过计算经期前后 CPU 时间的差值),因此只需将其除以挂钟时间即可。
cgroup=$(awk -F: '$2 == "cpu,cpuacct" { print $3 }' /proc/self/cgroup)
tstart=$(date +%s%N)
cstart=$(cat /sys/fs/cgroup/cpu/$cgroup/cpuacct.usage)
sleep 5
tstop=$(date +%s%N)
cstop=$(cat /sys/fs/cgroup/cpu/$cgroup/cpuacct.usage)
bc -l <<EOF
($cstop - $cstart) / ($tstop - $tstart) * 100
EOF
Run Code Online (Sandbox Code Playgroud)
如果你想避免调用date
(和cat
),你可以使用这样的:read tstart _ < /proc/uptime
。
归档时间: |
|
查看次数: |
6554 次 |
最近记录: |