web-dev-qa-db-ja.com

2つのプロセス間の共有メモリを知る方法は?

共有メモリの量 2つのプロセス、つまり共有メモリの共通部分を知る必要があります。

何か案は?

4
idelvall

関心のあるプロセスIDの/proc/<pid>/maps, /proc/<pid>/smaps(またはOSがサポートしている場合はpmap -x <pid>)を調べ、出力を比較して共有メモリ領域を決定できます。これには、shmget呼び出しによる共有メモリセグメントのほか、共有ライブラリ、ファイルも含まれます。

編集:mr.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.
4
VenkatC