我输入了 free 命令来获取内存使用情况,如下所示:
free -m
输出:
我想使用此命令来获取相同的信息,但对于所有用户例如:
我使用了这个命令...因为它对我来说很容易..将其输出存储在 bash 脚本中的变量中...
答案1
free
已经基于系统范围的内存使用情况。
如果您想要针对每个用户执行某些操作,您可以尝试以下操作:
ps aux | awk 'NR>2{arr[$1]+=$6}END{for(i in arr) print i,arr[i]}'
简单解释一下它的awk
作用:
- 去掉第一行
- 遍历每一行并为每个给定的用户名创建一个数组。对于每个用户名,它都会添加第六列
ps aux
(驻留集大小)并将它们相加。 - 之后,它只需遍历数组键即可打印内容。
答案2
一种选择是使用 smem
因为free
不提供此功能。
$ sudo smem -u -k -t
User Count Swap USS PSS RSS
daemon 1 0 196.0K 197.0K 360.0K
rtkit 1 0 304.0K 317.0K 1.4M
[...]
root 44 0 164.3M 197.7M 284.4M
gert 88 0 1.7G 1.8G 3.2G
---------------------------------------------------
159 0 1.9G 2.1G 3.6G
有关 USS 和 PSS 含义的解释,请参阅 smem 手册页的摘录。
[...] Unshared memory is reported as the USS (Unique Set
Size). Shared memory is divided evenly among the processes shar‐
ing that memory. The unshared memory (USS) plus a process's pro‐
portion of shared memory is reported as the PSS (Proportional Set
Size). The USS and PSS only include physical memory usage. They
do not include memory that has been swapped out to disk.
我怀疑RSS 是住宅内存使用情况,在其他实用程序中也称为 RES。有关内存使用情况表达的更多信息,请参阅 Superuser.com 上的此问答:关于内存管理我应该了解些什么?