ユーザーの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; }'

最初の列はユーザ​​ー名を表し、2番目の列は集計されたCPU使用率を表し、3列目はCPUコア数で正規化されたCPU使用率を表します。

表示用の関連スクリプトもあります。みんなユーザーあたりのメモリ使用量:showPerUserMem.sh

リアルタイム監視のためには、watchコマンドを介して定期的にこれらのスクリプトを実行するだけです。

CPU使用量に基づいてソートするには、出力をsort -k2 -nr

おすすめ記事