共有されてるメモリ領域は/proc/$pid/smapsで取れます。Linux::Smapsを使うとプロセス全体での合計が見れたりして便利です。 Linux::Smapsの例を見るとLinuxのcopy on writeで共有されている様子が分かりやすいです。Apache + mod_perlやFastCGIで大量にforkするときには注意が必要ですね。 大雑把に言うと以下のようになります。
forkする前に確保したメモリ領域は共有される→shared_dirtyになる
forkした後にその領域に書き込みを行うとコピーされる→private_dirtyになる
forkした後に確保した領域は共有されない(当たり前)→shared/privateにならない(多分)
Posted on Sunday January 24th