如何我可以看到用户在Linux中的内存使用情况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
所报告的每个进程的内存百分比。 第二个版本以字节为单位总结内存,然后计算总的百分比,从而导致更高的精度。
如果您的系统支持,请尝试安装并使用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
这一行代码至少在四个不同的发行版和版本的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