我在 Linux 中计算进程 CPU 负载时遇到问题。我有一个 bash 脚本,它在 30 秒的时间内从 /PROC/PID/STAT 获取有关 Linux 进程的所有信息。我还从 /PROC/ 中得到诸如 CLK_TCK、CPU 数量、系统正常运行时间等的想法
#!/bin/bash
log_file=/tmp/cpu_last.log
n=1
SYSTEM_UPTIME_SEC=$(tr . ' ' </proc/uptime | awk '{print $1}')
CLK_TCK=$(getconf CLK_TCK)
num_cpus=$(nproc)
while [ $n -le 30 ]
do
now=$(date +%s%3N)
SYSTEM_UPTIME_SEC=$(tr . ' ' </proc/uptime | awk '{print $1}')
echo "$n"
echo "|$n|$CLK_TCK|$SYSTEM_UPTIME_SEC|$now|$num_cpus|" >> $log_file
cat /proc/[0-9]*/stat >> $log_file &
sleep 1
n=$(( n+1 ))
done]*/stat >> $log_file &
sleep 1
done
我的目标是根据这些数据计算特定进程当前的 CPU 消耗。我尝试了多个公式(数据收集第一个周期的 utime + stime - 第二个周期的 utime + stime / clk / 秒等),但我从未获得与 TOP 命令中看到的相同值。那么,你能帮我找到正确的公式来计算当前消耗的 CPU% 进程吗?
我厌倦了使用不同的公式来计算进程的当前 CPU 负载,但我仍然得到与 TOP 结果不同的结果。我想按进程计算当前的 CPU 消耗,但我的公式都不起作用。我需要使用 /PROC/ 中的数据来收集数据,因为我正在低硬件 Linux 系统上工作,并且我的数据收集必须对系统产生尽可能低的影响。