如何测量Linux中用户空间进程使用的内存总量?

如何测量Linux中用户空间进程使用的内存总量?

如何测量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

(为了便于阅读,我将其分成几行。如果您希望将其作为一行,您可以简单地将所有行连接在一起。)

相关内容