/ proc / pid / smapsからプロセスのメモリ使用量に関する情報を取得する


46

の特定のプロセス/proc/<pid>/smaps、特定のマッピングエントリの場合:

  1. Shared_Clean
  2. Shared_Dirty
  3. Private_Clean
  4. Private_Dirty

Shared_Clean+ Shared_Dirty他のプロセスと共有されているメモリの量を?共有RSSのようなものですか?

同様に、1つのプロセスでのみ使用可能なメモリ量はPrivate_Clean+ です。プライベートRSSのようなものですか?Private_Dirty

PSS値はPrivateRSS +(SharedRSS /それを共有するプロセスの数)ですか?

このリンクを読んだ後のいくつかの質問:LWN

ここで、プロセス全体についてお話ししましょう。そのsmapsエントリは私たちが見ています。

プロセスのすべてのsmapsエントリに対してShared_Clean+ Shared_Dirty+ Private_Clean+ Private_Dirtyを実行すると、によって報告されたプロセスのRSSを取得することに気付きましたps。例えば

ps -p $$ -o pid,rss

すべてのの合計として私にRSS用(約)同じ値を与えるShared_CleanShared_DirtyPrivate_CleanPrivate_Dirtyエントリ内の/ proc / $$ / smaps。

しかし、プロセス全体のPSSどうでしょうか?したがって、上記の例から、$$のPSSを取得するにはどうすればよいですか?すべてのsmapsマッピングにPSSエントリを追加して、$$のPSSに到達できますか?

そして、プロセス全体のUSSどうですか?もう一度上記の例を取り上げると、$ .. rightのすべてのsmapsエントリのPrivate_ *エントリのみを合計することで、$$でUSSに到着できると思います。

注:
PSS =比例設定サイズ。
USS =一意のセットサイズ。

回答:


50

クリーンページは、マップされてから変更されていないページです(通常、共有ライブラリのテキストセクションはディスクから読み取られ(必要な場合)、変更されないため、共有されたクリーンページになります)。
ダーティページとは、クリーンではない(変更された)ページです。

プライベートページはそのプロセスでのみ使用でき、共有ページは他のプロセスによってマップされます*

RSSは、プロセスに現在マップされている、共有されているかどうかにかかわらず、ページの総数です。そのため、Shared_Clean+ Shared_DirtyはRSSの共有部分(つまり、他のプロセスにもマッピングされるRSSの部分)、およびPrivate_Clean+ Private_DirtyRSSのプライベート部分(つまり、このプロセスでのみマッピングされる)になります。

PSS(比例共有サイズ)は、説明どおりです。プライベートページはそのまま合計され、各共有マッピングのサイズは、それを共有するプロセスの数で除算されます。
したがって、プロセスに10万個のプライベートページがあり、50万個のページが他の1つのプロセスと共有され、50万個のページが4つの他のプロセスと共有されている場合、PSSは次のようになります。

100k + (500k / 2) + (500k / 5) = 450k

さらに読む:

プロセス全体の合計について:

  • RSS(およそ+)のRss:エントリを合計することで取得できます(smaps共有/プライベートの共有/ダーティエントリを追加する必要はありません)。

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Pss:同じ方法で値を合計して、process-globalを取得できますPSS
  • USSsmapsはで報告されていませんが、実際にはプライベートマッピングの合計であるため、同じ方法で取得できます

*「共有可能な」ページは、実際に共有されるまでプライベートマッピングとしてカウントされます。つまり、現在使用しているプロセスが1つしかない場合libfoo、そのライブラリのテキストセクションはプロセスのプライベートマッピングに表示されます。別のプロセスがそのライブラリの使用を開始した場合にのみ、共有マッピングで考慮されます(そしてプライベートマッピングから削除されます)。
+すべてのプロセスで値が正確に加算されるわけではありません。なぜかわからない...ごめんなさい。


すばらしい回答をありがとう。感謝します。LWMの記事を読んで、さらにいくつか質問をするようになったので、上記の質問に追加しました。
アンクルアガルワル

すばらしいです!とても助かります!!
カミノ

私はまだshared_dirtyについて混乱しています-これの汚い性質はまだ共有されるのを妨げていますか?
ケビン

@Kevin:それらが共有されなかった場合、それらは考慮されませんShared_Dirty-あなたの質問を明確にできますか?
マット

ダーティとは、元から変更されたことを意味します。プロセスですよね?どのように共有からローカルになるのですか?
ケビン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.