Saya perlu memantau penggunaan CPU oleh pengguna dua server (Ubuntu dan CentOS). Sebagai contoh:
user1 5%
user2 10%
...
Apakah ada alat yang mirip top
atau htop
yang bisa melakukan itu?
Saya perlu memantau penggunaan CPU oleh pengguna dua server (Ubuntu dan CentOS). Sebagai contoh:
user1 5%
user2 10%
...
Apakah ada alat yang mirip top
atau htop
yang bisa melakukan itu?
Jawaban:
Berikut ini adalah skrip untuk mencetak total penggunaan CPU untuk setiap pengguna yang saat ini masuk , 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; }'
Dan di sini adalah versi yang sedikit dimodifikasi untuk mencetak penggunaan CPU dari semua pengguna yang tersedia (tetapi melewatkan yang dengan penggunaan CPU nol), 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; }'
Kolom pertama mewakili nama pengguna, kolom kedua penggunaan CPU teragregasi, dan kolom ketiga penggunaan CPU dinormalisasi menurut jumlah inti CPU.
Ada juga skrip terkait untuk menunjukkan total penggunaan memori untuk setiap pengguna: showPerUserMem.sh
Untuk pemantauan langsung, jalankan skrip ini secara berkala melalui watch
perintah.
Untuk mengurutkan berdasarkan penggunaan CPU, pipa output ke sort -k2 -nr
.
$USER
sudah nama pengguna Anda, jadi ut sama dengan id -nu
perintah yang Anda gunakan. Saya telah mengedit posting Anda untuk mengubah ini.
/etc/init.d/
direktori saya juga melakukan hal ini. Sebaliknya, menimpa variabel lingkungan yang ada harus dihindari.
top -u user
dan mengarahkan hasilnya ke file, lalu memantau pengguna lain. Anda kemudian akan memiliki monitor penggunaan proc untuk pengguna Anda pada interval tertentu.