如何测量Linux中分配给用户空间程序的内存总量?这是用户空间程序在实内存中拥有的所有内存页的大小。
/proc/meminfo
似乎没有提供此信息。
目前,我正在添加rss
所有进程的字段,/proc/$pid/stat
但不考虑共享内存页面。
更新:我所说的“用户空间”是指由所有用户运行的进程,包括 root(而不是内核空间)。
答案1
使用smem
显示所有用户内存的总数,没有交换,并且不计算任何共享内存两次:
sudo smem -c pss -t | tail -1
我的系统上的输出:
4119846
展开:
-c pss
选择列,在本例中PSS。从man smem
:smem reports physical memory usage, taking shared memory pages into account. Unshared memory is reported as the USS (Unique Set Size). Shared memory is divided evenly among the processes sharing that memory. The unshared memory (USS) plus a process's proportion 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.
-t
显示了一个全部的或最后使用的所有 PSS 的总和,并tail -1
消除前面的数据。
仅显示总数未共享的用户内存,替换-c pss
为-c uss
:
sudo smem -c uss -t | tail -1
输出:
3874356
请注意,上面的 PSS 总数或多或少与中所示的数字相同第 5 行,第 2 列这里:
smem -w
输出:
Area Used Cache Noncache
firmware/hardware 0 0 0
kernel image 0 0 0
kernel dynamic memory 1367712 1115708 252004
userspace memory 4112112 419884 3692228
free memory 570060 570060 0
答案2
这是我使用的单行代码,向您显示哪个进程使用了多少 Swap 和 PID:
for file in /proc/*/status;
do
awk '/VmSwap|Tgid|Name/ {printf "%s %s %s", $2, $3, $4} END { print "" }' "$file";
done | sort -k 3 -n -r | head -20
(为了便于阅读,我将其分成几行。如果您希望将其作为一行,您可以简单地将所有行连接在一起。)