Muszę monitorować użycie procesora przez użytkowników dwóch serwerów (Ubuntu i CentOS). Na przykład:
user1 5%
user2 10%
...
Czy istnieje narzędzie podobne do top
lub htop
że można to zrobić?
Muszę monitorować użycie procesora przez użytkowników dwóch serwerów (Ubuntu i CentOS). Na przykład:
user1 5%
user2 10%
...
Czy istnieje narzędzie podobne do top
lub htop
że można to zrobić?
Odpowiedzi:
Oto skrypt do wydrukowania całkowitego zużycia procesora dla każdego aktualnie zalogowanego użytkownika , 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; }'
A oto nieco zmodyfikowana wersja do drukowania wykorzystania procesora przez wszystkich dostępnych użytkowników (ale pomijająca tych z zerowym użyciem procesora), 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; }'
Pierwsza kolumna reprezentuje nazwę użytkownika, druga kolumna zagregowane użycie procesora, a trzecia kolumna znormalizowane użycie procesora zgodnie z liczbą rdzeni procesora.
Istnieje również powiązany skrypt pokazujący całkowite użycie pamięci dla każdego użytkownika: showPerUserMem.sh
Aby monitorować na żywo, wykonuj te skrypty okresowo za pomocą watch
polecenia.
Aby posortować według użycia procesora, potokuj wyjście do sort -k2 -nr
.
$USER
to już twoja nazwa użytkownika, więc ut jest taka sama jak id -nu
komenda, której używasz. Edytowałem twój post, aby to zmienić.
/etc/init.d/
robi to również dziewięć na dziesięć skryptów w moim katalogu. Należy natomiast unikać nadpisywania istniejących zmiennych środowiskowych.
top -u user
i przekierować go do pliku, a następnie monitorować innego użytkownika. będziesz mieć monitor użycia proc dla użytkowników w danym przedziale czasowym.