プロセスの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プライベートマップの合計の場合は、summingと同じですが、RSSすべての行に対して合計するのではなく、Rss:すべてのプライベートマップに対して合計します(/Private/代わりに/Rss:/)。

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

関連情報