共有メモリの量間 2つのプロセス、つまり共有メモリの共通部分を知る必要があります。
何か案は?
関心のあるプロセス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.