Linux 中每个用户的内存使用情况?

Linux 中每个用户的内存使用情况?

假设我的 Linux 机器上登录了 20 个用户。我怎样才能知道他们每个人使用了多少内存?

答案1

您可以尝试使用微电子(看ELC2009:使用 smem 可视化内存使用情况了解更多信息)。 特别是,sudo smem -u应该能给你你想要的信息。

答案2

忽略共享内存问题,这里有一个快速脚本,它为所有登录用户提供 RSS 和 VMEM,按 vmem 排序,并组织成可爱的列:

(echo "user rss(KiB) vmem(KiB)";
 for user in $(users | tr ' ' '\n' | sort -u); do
   echo $user $(ps -U $user --no-headers -o rss,vsz \
     | awk '{rss+=$1; vmem+=$2} END{print rss" "vmem}')
 done | sort -k3
) | column -t

此版本以 GB 为单位打印内存使用情况并按 RSS 排序:

echo "user       rss(GB) vmem(GB)";
for user in $(users | tr ' ' '\n' | sort -u); do
    ps -U $user --no-headers -o rss,vsz \
        | awk -v user=$user '{rss+=$1; vmem+=$2} END{printf("%-10s %7.1f %8.1f\n", user, rss/1024/1024, vmem/1024/1024)}'
done | sort --general-numeric-sort --key=2 --reverse

答案3

我认为以下方法可行,可获得 RSS 总数。这将获得用户 kbrandt 和 root 的 RSS 总数。

ps -U kbrandt,root --no-headers  -o rss | (tr '\n' +; echo 0) | bc

答案4

这是一个棘手的问题。您可以轻松地在“ps”输出中汇总 RSS+swap 总量,但共享内存呢?如果不同的用户运行相同的进程,他们可以轻松共享相同的代码页。您要向谁解释呢?缓冲区和缓存呢?这实际上取决于您希望结果有多准确。您想要的结果越准确,就越难。

相关内容