사용자의 CPU 사용량을 모니터링하는 방법은 무엇입니까?

사용자의 CPU 사용량을 모니터링하는 방법은 무엇입니까?

두 서버(Ubuntu 및 CentOS)에서 사용자의 CPU 사용량을 모니터링해야 합니다. 예를 들어:

user1     5%
user2    10%
...

비슷한 도구 tophtop방법이 있나요?

답변1

이것은 인쇄 스크립트입니다.모두사용자당 CPU 사용량현재 로그인되어 있음,showPerUserCPU.sh:

own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')

for user in $(who | awk '{print $1}' | sort -u)
do
    # print other user's CPU usage in parallel but skip own one because
    # spawning many processes will increase our CPU usage significantly
    if [ "$user" = "$own" ]; then continue; fi
    (top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }') &
    # don't spawn too many processes in parallel
    sleep 0.05
done
wait

# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'

다음은 CPU 사용량을 인쇄하기 위해 약간 수정된 버전입니다.모두사용 가능한 사용자(그러나 CPU 사용량이 0인 사용자는 건너뛰기)showAllPerUserCPU.sh:

own=$(id -nu)
cpus=$(lscpu | grep "^CPU(s):" | awk '{print $2}')

for user in $(getent passwd | awk -F ":" '{print $1}' | sort -u)
do
    # print other user's CPU usage in parallel but skip own one because
    # spawning many processes will increase our CPU usage significantly
    if [ "$user" = "$own" ]; then continue; fi
    (top -b -n 1 -u "$user" | awk -v user=$user -v CPUS=$cpus 'NR>7 { sum += $9; } END { if (sum > 0.0) print user, sum, sum/CPUS; }') &
    # don't spawn too many processes in parallel
    sleep 0.05
done
wait

# print own CPU usage after all spawned processes completed
top -b -n 1 -u "$own" | awk -v user=$own -v CPUS=$cpus 'NR>7 { sum += $9; } END { print user, sum, sum/CPUS; }'

첫 번째 열은 사용자 이름을 나타내고, 두 번째 열은 집계된 CPU 사용량을 나타내며, 세 번째 열은 CPU 코어 수로 정규화된 CPU 사용량을 나타냅니다.

표시를 위한 관련 스크립트도 있습니다.모두사용자당 메모리 사용량:showPerUserMem.sh

실시간 모니터링을 위해서는 watch명령을 통해 주기적으로 이러한 스크립트를 실행하면 됩니다.

CPU 사용량을 기준으로 정렬하려면 출력을 sort -k2 -nr.

관련 정보