Cgroups

計算一段時間內 cgroup 的 CPU 使用率

  • June 21, 2018

如果我有類似的 cgroupuser.slice並已CPUAccounting=true設置,我想知道如何使用cpuacct.usagecpuacct.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

如果你想避免呼叫date(and cat),你可以使用類似的東西:read tstart _ < /proc/uptime.

引用自:https://unix.stackexchange.com/questions/450748