32

我如何在 linux centos 6 中查看用户的内存使用情况

For example:
    USER    USAGE
    root    40370
    admin   247372
    user2   30570
    user3   967373
4

5 回答 5

44

这个单行代码至少在四个具有不同发行版和版本的不同 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

关于实现,这里没有 shell 循环构造;这使用关联数组进行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),因此它不计算任何共享内存段。

编辑:一个更易读的版本。

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
于 2015-01-28T14:28:55.123 回答
31

使用标准工具的每用户内存使用百分比:

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。第二个版本改为以字节为单位汇总内存,然后计算总百分比,从而获得更高的精度。

于 2013-01-08T12:01:58.340 回答
16

如果您的系统支持,请尝试安装和使用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
于 2013-01-08T11:56:45.517 回答
3

这将返回以 GB 为单位的用户的总 ram 使用量,反向排序

sudo ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]/1024/1024}}' | sort -nk2 -r
于 2020-03-03T09:06:15.240 回答
0

您可以使用以下 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)))
于 2019-08-22T20:05:27.183 回答