如何在linux中查找用户内存使用情况
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/14214315/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to find user memory usage in linux
提问by Hamidreza
How i can see memory usage by user in linux centos 6
我如何在 linux centos 6 中查看用户的内存使用情况
For example:
USER USAGE
root 40370
admin 247372
user2 30570
user3 967373
采纳答案by scai
per-user memory usage in percent using standard tools:
使用标准工具的每用户内存使用百分比:
for USER in $(ps haux | awk '{print }' | sort -u)
do
ps haux | awk -v user=$USER ' ~ user { sum += } END { print user, sum; }'
done
or for more precision:
或者为了更精确:
TOTAL=$(free | awk '/Mem:/ { print }')
for USER in $(ps haux | awk '{print }' | sort -u)
do
ps hux -U $USER | awk -v user=$USER -v total=$TOTAL '{ sum += } END { printf "%s %.2f\n", user, sum / total * 100; }'
done
The first version just sums up the memory percentage for each process as reported by ps
. The second version sums up the memory in bytes instead and calculates the total percentage afterwards, thus leading to a higher precision.
第一个版本只是总结了每个进程的内存百分比,如ps
. 第二个版本以字节为单位总结内存,然后计算总百分比,从而导致更高的精度。
回答by Audrius Meskauskas
If your system supports, try to install and use smem:
如果您的系统支持,请尝试安装和使用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
or
或者
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
In Ubuntu, smem can be installed by typing
在 Ubuntu 中,可以通过键入来安装 smem
sudo apt install smem
回答by Joshua Huber
This one-liner worked for me on at least four different Linux systems with different distros and versions. It also worked on FreeBSD 10.
这个单行程序在至少四个不同发行版和版本的 Linux 系统上对我有用。它也适用于 FreeBSD 10。
ps hax -o rss,user | awk '{a[]+=;}END{for(i in a)print i" "int(a[i]/1024+0.5);}' | sort -rnk2
About the implementation, there are no shell loop constructs here; this uses an associative array in awk
to do the grouping & summation.
关于实现,这里没有shell循环结构;这使用关联数组进行awk
分组和求和。
Here's sample output from one of my servers that is running a decent sized MySQL, Tomcat, and Apache. Figures are in MB.
下面是我的一台服务器的示例输出,该服务器运行了相当规模的 MySQL、Tomcat 和 Apache。数字以 MB 为单位。
mysql 1566
joshua 1186
tomcat 353
root 28
wwwrun 12
vbox 1
messagebus 1
avahi 1
statd 0
nagios 0
Caveat: like most similar solutions, this is only considering the resident set (RSS), so it doesn't count any shared memory segments.
警告:像大多数类似的解决方案一样,这只是考虑了常驻集 (RSS),因此它不计算任何共享内存段。
EDIT: A more human-readable version.
编辑:一个更易读的版本。
echo "USER RSS PROCS" ; echo "-------------------- -------- -----" ; ps hax -o rss,user | awk '{rss[]+=;procs[]+=1;}END{for(user in rss) printf "%-20s %8.0f %5.0f\n", user, rss[user]/1024, procs[user];}' | sort -rnk2
And the output:
和输出:
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
回答by Hridoy Sankar Dutta
You can use the following Python script to find per-user memory usage using only sys and os module.
您可以使用以下 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)))
回答by Pradeep Pathak
This will return the total ram usage by users in GBs, reverse sorted
这将返回用户的总内存使用量(以 GB 为单位),反向排序
sudo ps --no-headers -eo user,rss | awk '{arr[]+=}; END {for (i in arr) {print i,arr[i]/1024/1024}}' | sort -nk2 -r