Linux上でプロセスの共有メモリサイズを取得しようとしました。プロセスの正確な共有メモリサイズを取得するには?
mapped: 206672K writeable/private: 4352K shared: 128K
あなたがいることを見ることができます:
トップとSHR場に確認してください:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1734 root 20 0 201m 4072 1012 S 0.0 0.1 22:00.65 php-fpm
のpmap -dここでは2つの異なるコマンドを使用した結果ですpmapの共有メモリサイズはtopよりはるかに小さくなります。
理由を見つけるためにいくつかのソースコードを読んでいます。すべてのファイルのページが共有メモリとしてカウントされているようです
unsigned long task_statm(struct mm_struct *mm, unsigned long *shared, unsigned long *text, unsigned long *data, unsigned long *resident) { *shared = get_mm_counter(mm, MM_FILEPAGES); *text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK)) >> PAGE_SHIFT; *data = mm->total_vm - mm->shared_vm; *resident = *shared + get_mm_counter(mm, MM_ANONPAGES); return mm->total_vm; }
:トップは/ procの// STATMから値を読んでいると、値がで計算されているようですか?
とのpmapコマンドは、/ procの//マップから情報を読み取り、その後、いくつかのフラグを介して共有メモリを計算します
3dc822a000-3dc822d000 rw-p 0002a000 08:13 5134288 /usr/lib64/libmcrypt.so.4.4.8 start-end flags file_offset dev_major:dev_minor inode
フラグであれば[3] ==「s」は、このマップされます共有されたものとして数えられる。
私の質問はより正確です。共有メモリのサイズを計算する方法が異なるのはなぜですか?
ありがとうございます!