- forkする前に確保したメモリ領域は子プロセスとの間で共有される
- 共有されたメモリ領域に対して書き込みを行うと共有は解除(コピー)される
- forkした後に確保したメモリ領域は子プロセスごとに確保される(共有されない)
init-+-4*[agetty]
|-apache2-+-51*[apache2]
| `-apache2---3*[testapp_fastcgi]
|-cron
|-dhcpcd
|-events/0
|-khelper
|-ksoftirqd/0
|-kswapd0
|-kthread-+-aio/0
| |-ata/0
| |-kacpid
| |-kblockd/0
| |-khubd
| |-kseriod
| |-2*[pdflush]
| `-reiserfs/0
|-login---bash---pstree
|-metalog---metalog
|-sshd
`-udevd
一つのapache2を親として,3つのFastCGIプロセスが走っています。つまり,forkの呼び出し元はapacheなのです。これではモジュールの共有がまったくできません。すべてのモジュールはプロセスごとに読み込まれます。
一方で下の設定例,FastCGIExternalServerを使った場合はどうでしょうか。(ちょっとさぼって,FastCGIプロセスの起動だけをしました)
init-+-4*[agetty]
|-cron
|-dhcpcd
|-events/0
|-khelper
|-ksoftirqd/0
|-kswapd0
|-kthread-+-aio/0
| |-ata/0
| |-kacpid
| |-kblockd/0
| |-khubd
| |-kseriod
| |-2*[pdflush]
| `-reiserfs/0
|-login---bash---pstree
|-metalog---metalog
|-sshd
|-testapp_fastcgi---5*[testapp_fastcgi]
`-udevd
一つのプロセスを親として,複数の子プロセスが起動されています。親プロセスは自分で呼び出したtestapp_fastcgi.plです。これならばどうにか工夫する余地があります。単純にやるなら,.plで色々useしておくことで共有されます。Catalystのお作法に従うなら各モジュールのsetupでしょうか?(未確認)
Trackback URL for this post:
http://old.typemiss.net/trackback/64
CPANモジュール: GTop GTop - Perl interface to libgtop perl.apache.org にある mod_perl パフォーマンスチューニングのドキュメントにて解説されていた、ある特定のモジュールを use した際のメモリ増加量を調べる方法。GTop っていうCPANモジュールを、こんな感じに使うことでお手軽に調べることができるようです: gtop.plx #!/usr/bin/perluse strict;use warnings;use GTop;my $gto
