如何在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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-06 18:36:47  来源:igfitidea点击:

How to find user memory usage in linux

linuxcentoscentos6

提问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 awkto 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