GNU/Linux >> Linux の 問題 >  >> Linux

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

/proc/<pid>/smaps内の特定のプロセスについて 、特定のマッピングエントリについて:

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

Shared_Cleanです + Shared_Dirty 他のプロセスと共有されるメモリの量は?つまり、共有RSSのようなものですか?

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

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

このリンクを読んだ後、さらにいくつか質問があります:LWN

次に、プロセス全体について説明します。そのsmapsエントリを確認します。

Shared_Cleanを実行すると、気づきました + Shared_Dirty + Private_Clean + Private_Dirty プロセスのすべてのsmapsエントリについて、
psによって報告されたプロセスのRSSを取得します。 、かなりかっこいいです。例:

ps -p $$ -o pid,rss

すべてのShared_Cleanの合計と(約)同じrssの値が表示されます 、Shared_DirtyPrivate_CleanPrivate_Dirty / proc / $$/smapsのエントリ。

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

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

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

承認された回答:

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

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

RSSは、現在プロセスにマップされている、共有されているかどうかに関係なく、ページの総数です。したがって、Shared_Clean + Shared_Dirty RSSの共有部分(つまり、他のプロセスにもマップされるRSSの部分)であり、Private_Clean + Private_Dirty RSSのプライベート部分(つまり、このプロセスでのみマップされます)。

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

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

その他の読み物:

  • ELC:アプリケーションは実際にどのくらいのメモリを使用していますか?
  • Documentation/filesystems/proc.txt カーネルソース内
  • man proc(5)
  • Linuxメモリ管理の概要
  • TLDP.orgでのメモリ管理
  • LinuxMM
関連:Linux –?のnoautoマウントフラグ

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

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

    awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
    
  • Pss:を要約できます プロセスグローバルPSSを取得するには、同じ方法で値を設定します 。
  • USS smapsでは報告されません 、しかし実際、これはプライベートマッピングの合計であるため、同じ方法で取得することもできます

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


Linux
  1. Linux –単一のLinuxプロセスのメモリ使用量を制限しますか?

  2. Linux –Linuxで/proc / $ pid / memから読み取る方法は?

  3. Linux – / proc/mntを/proc/ mountsにリンクしますか?

  1. Unix / Linux でプロセスのパスを取得するにはどうすればよいですか

  2. Linux/Unix プロセスのピーク時のメモリ使用量

  3. CからLinuxでPIDによってプロセスのCPU使用率を計算する方法は?

  1. Linuxでのpidからのプロセス名

  2. Linux で /proc/$pid/mem から読み取るにはどうすればよいですか?

  3. Linux でメモリ使用量はどのように報告されますか?