我们如何获得进程的 USS

我们如何获得进程的 USS

据我所知有几个内存概念:VSS RSS PSS和USS,其中USS(唯一集大小)是进程专用的物理内存(如果需要请纠正我)。

我认为这应该是一个非常有用的值,让我知道哪个进程使用了​​太多物理内存?

但我们怎样才能得到这个值呢?通过 ps 或从任何 /proc 文件?
(我知道 smem 工具可以提供帮助,但是有没有内置的方法?)

更新20231015

这个答案提到 /proc/<pid>/smaps_rollup 有总和值:

grep "Private" /proc/1748/smaps_rollup 
Private_Clean:     55700 kB
Private_Dirty:     67628 kB
Private_Hugetlb:       0 kB

所以我们可以得到整个值:

awk '/Private/{ sum += $2 } END { print sum }' /proc/1748/smaps_rollup

答案1

答案是从 /proc/pid/smaps 获取有关进程内存使用情况的信息包括执行此操作的说明。它没有具体给出具体的确切命令USS,但它提供了提出适用于 的命令所需的所有信息和示例USS

  • RSS可以通过对中的条目求和来获得(大约+)(您不需要将共享/私有共享/脏条目相加)。Rss:smaps

      awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    

[...]

  • USS中没有报告smaps,但实际上,它是私有映射的总和,因此您也可以通过相同的方式获取它

因此,如果USS是私有映射的总和,则与对 求和相同RSS,但不是对所有行求和Rss:,而是对所有私有映射求和(/Private/而不是/Rss:/):

awk '/Private/{ sum += $2 } END { print sum }' /proc/$$/smaps

相关内容