/PROC/에서 Linux 프로세스의 현재 CPU 소비를 계산하는 방법(TOP 명령에서 값 가져오기)

/PROC/에서 Linux 프로세스의 현재 CPU 소비를 계산하는 방법(TOP 명령에서 값 가져오기)

Linux에서 프로세스 CPU 로드를 계산하는 데 문제가 있습니다. 30초 이내에 /PROC/PID/STAT에서 Linux 프로세스에 대한 모든 정보를 가져오는 bash 스크립트가 있습니다. 또한 CLK_TCK, CPU 수, 시스템 가동 시간 등과 같은 /PROC/에서 아이디어를 얻습니다.

#!/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/second 등)을 시도했지만 TOP 명령에서 본 것과 동일한 값을 얻지 못했습니다. 그렇다면 현재 프로세스에서 소비하는 CPU%를 계산하는 올바른 공식을 찾는 데 도움을 주실 수 있나요?

프로세스의 현재 CPU 로드를 계산하기 위해 다른 공식을 사용하는 데 지쳤지만 여전히 TOP 결과와 다른 결과를 얻습니다. 현재 프로세스별 CPU 사용량을 계산하고 싶지만 내 공식이 작동하지 않습니다. 나는 낮은 하드웨어 Linux 시스템에서 작업하고 있고 내 데이터 수집이 시스템에 가능한 한 적은 영향을 주어야 하기 때문에 /PROC/의 데이터를 사용하여 데이터를 수집해야 합니다.

관련 정보