İki sunucunun (Ubuntu ve CentOS) kullanıcıları tarafından CPU kullanımını izlemem gerekiyor. Örneğin:
user1 5%
user2 10%
...
Buna benzer bir araç var mı top
ya da htop
bunu yapabilir mi?
İki sunucunun (Ubuntu ve CentOS) kullanıcıları tarafından CPU kullanımını izlemem gerekiyor. Örneğin:
user1 5%
user2 10%
...
Buna benzer bir araç var mı top
ya da htop
bunu yapabilir mi?
Yanıtlar:
Şu anda oturum açmış olan her kullanıcı için toplam CPU kullanımını yazdırmak için bir komut dosyası , 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; }'
Ve burada tüm kullanılabilir kullanıcıların CPU kullanımını yazdırmak için biraz değiştirilmiş bir versiyon (ancak CPU kullanımı sıfır olanları atlamak), 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; }'
İlk sütun kullanıcı adını, ikinci sütun toplu CPU kullanımını ve normalleştirilmiş CPU'nun CPU çekirdek sayısına göre kullandığı üçüncü sütunu temsil eder.
Her kullanıcı için toplam bellek kullanımını göstermek için ilgili bir komut dosyası da vardır : showPerUserMem.sh
Canlı izleme için bu komut dosyalarını düzenli aralıklarla watch
komutla .
CPU kullanımına göre sıralama için, çıkışı boru hattına bağlayın sort -k2 -nr
.
$USER
kullanıcı adınız zaten, bu yüzden ut kullandığınız id -nu
komutla aynı . Bunu değiştirmek için yayınınızı düzenledim.
/etc/init.d/
da bunu yapıyor. Buna karşılık mevcut ortam değişkenlerinin üzerine yazmaktan kaçınılmalıdır.
top -u user
sonucu göz önünde bulundurarak bir dosyaya yönlendirebilir ve ardından başka bir kullanıcıyı izleyebilirsiniz. daha sonra, belirli bir aralıkta kullanıcılarınız için proc kullanımını izlerdiniz.