Как я могу видеть использование памяти пользователем в linux centos 6
For example:
USER USAGE
root 40370
admin 247372
user2 30570
user3 967373
Как я могу видеть использование памяти пользователем в linux centos 6
For example:
USER USAGE
root 40370
admin 247372
user2 30570
user3 967373
Использование памяти пользователя в процентах с использованием стандартных инструментов:
for USER in $(ps haux | awk '{print $1}' | sort -u)
do
ps haux | awk -v user=$USER '$1 ~ user { sum += $4} END { print user, sum; }'
done
или для большей точности:
TOTAL=$(free | awk '/Mem:/ { print $2 }')
for USER in $(ps haux | awk '{print $1}' | sort -u)
do
ps hux -U $USER | awk -v user=$USER -v total=$TOTAL '{ sum += $6 } END { printf "%s %.2f\n", user, sum / total * 100; }'
done
Первая версия просто суммирует процент памяти для каждого процесса, о котором сообщает ps
. Вторая версия суммирует память в байтах и вычисляет общий процент потом, что приводит к более высокой точности.
Этот однострочный модуль работал у меня, по крайней мере, в четырех разных системах Linux с разными дистрибутивами и версиями. Он также работал над FreeBSD 10.
ps hax -o rss,user | awk '{a[$2]+=$1;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2
Что касается реализации, здесь нет конструкций оболочки оболочки; это использует ассоциативный массив в awk
для группировки и суммирования.
Здесь приведен пример вывода с одного из моих серверов, на котором работают MySQL, Tomcat и Apache. Цифры указаны в MB.
mysql 1566
joshua 1186
tomcat 353
root 28
wwwrun 12
vbox 1
messagebus 1
avahi 1
statd 0
nagios 0
Предостережение: как и большинство подобных решений, это касается только резидентного набора (RSS), поэтому он не учитывает сегменты разделяемой памяти.
EDIT: более понятная для человека версия.
echo "USER RSS PROCS" ; echo "-------------------- -------- -----" ; ps hax -o rss,user | awk '{rss[$2]+=$1;procs[$2]+=1;}END{for(user in rss) printf "%-20s %8.0f %5.0f\n", user, rss[user]/1024, procs[user];}' | sort -rnk2
И вывод:
USER RSS PROCS
-------------------- -------- -----
mysql 1521 1
joshua 1120 28
tomcat 379 1
root 19 107
wwwrun 10 10
vbox 1 3
statd 1 1
nagios 1 1
messagebus 1 1
avahi 1 1
Если ваша система поддерживает, попробуйте установить и использовать smem:
smem -u
User Count Swap USS PSS RSS
gdm 1 0 308 323 820
nobody 1 0 912 932 2240
root 76 0 969016 1010829 1347768
или
smem -u -t -k
User Count Swap USS PSS RSS
gdm 1 0 308.0K 323.0K 820.0K
nobody 1 0 892.0K 912.0K 2.2M
root 76 0 937.6M 978.5M 1.3G
ameskaas 46 0 1.2G 1.2G 1.5G
124 0 2.1G 2.2G 2.8G
В Ubuntu можно установить smem, набрав
sudo apt install smem
Вы можете использовать следующий скрипт Python, чтобы найти использование памяти для каждого пользователя, используя только модули sys и os.
import sys
import os
# Get list of all users present in the system
allUsers = os.popen('cut -d: -f1 /etc/passwd').read().split('\n')[:-1]
for users in allUsers:
# Check if the home directory exists for the user
if os.path.exists('/home/' + str(users)):
# Print the current usage of the user
print(os.system('du -sh /home/' + str(users)))