如何从 /PROC/ 计算 Linux 中进程的当前 CPU 消耗(从 TOP 命令获取值)

如何从 /PROC/ 计算 Linux 中进程的当前 CPU 消耗(从 TOP 命令获取值)

我在 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 系统上工作,并且我的数据收集必须对系统产生尽可能低的影响。

相关内容