2つのプロセス間の共有メモリをどのように理解できますか?

2つのプロセス間の共有メモリをどのように理解できますか?

共有メモリの量を知る必要があります。〜サイ両方のプロセスの交差点、つまり共有メモリです。

どんなアイデアがありますか?

答え1

関心のあるプロセスIDを見て/proc/<pid>/maps, /proc/<pid>/smaps(またはオペレーティングシステムがサポートしている場合)、出力を比較して共有メモリ領域を決定できます。pmap -x <pid>これには、shmget を介して呼び出される共有メモリセグメントと共有ライブラリとファイルが含まれます。

編集:Spuratic氏が指摘したようにここカーネルの詳細があります。

psを使用してプロセスRSSを表示できますが、すべての共有ページを考慮するわけではありません。具体的なプロセスについてはRSSをご覧ください。下記をご覧ください。

cv@thunder:~$ ps -o rss,pid,comm -p $$,7023
  RSS   PID COMMAND
22060  7023 xfwm4
 6876 18094 bash

smemツールは共有ページを考慮してより詳細な情報を提供します。上記のプロセスを理解するには、以下の出力を参照してください。

cv@thunder:~$ smem -t |egrep "RSS|$$|7023"
  PID User     Command                         Swap      USS      PSS      RSS 
 9852 cv       grep -E RSS|18094|7023             0      340      367     2220 
18094 cv       bash                               0     3472     4043     6876 
 7023 cv       xfwm4 --display :0.0 --sm-c        0     5176     7027    22192 

から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.

関連情報