Мені потрібно стежити за використанням процесора користувачами двох серверів (Ubuntu та CentOS). Наприклад:
user1 5%
user2 10%
...
Чи є інструмент, подібний top
або htop
що може це зробити?
Мені потрібно стежити за використанням процесора користувачами двох серверів (Ubuntu та CentOS). Наприклад:
user1 5%
user2 10%
...
Чи є інструмент, подібний top
або htop
що може це зробити?
Відповіді:
Ось сценарій для друку загального використання процесора для кожного користувача, який зараз увійшов , 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 використовує нуль), 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.
Існує також пов'язаний сценарій для показу загального обсягу використання пам'яті для кожного користувача: showPerUserMem.sh
Для живого моніторингу просто виконайте ці сценарії періодично за допомогою watch
команди.
Для сортування за використанням процесора підключіть висновок до sort -k2 -nr
.
$USER
це вже ваше ім'я користувача, тому ut - те саме, що і id -nu
команда, яку ви використовуєте. Я відредагував ваше повідомлення, щоб змінити це.
/etc/init.d/
це роблять і дев'ять із десяти сценаріїв у моєму каталозі. На противагу цьому слід уникати перезапису існуючих змінних середовищ.
top -u user
та перенаправити результат на файл, а потім стежити за іншим користувачем. Тоді ви матимете монітор використання програм для своїх користувачів через певний інтервал.