共用レンタルサーバーのPHPがCGI版で動いている理由
「レンタルサーバーのPHPはなんでCGIで動かしてるところが多いんだろ?」と聞かれて答えられなかったので調べたメモ。
PHPを動かす場合、CGIとして動かす方式とApacheのモジュール(mod_php)として動かす方式があります。PHPだけでなくPerlなどもそうですが。
負荷やパフォーマンスの面で見るとモジュール版のほうが負荷は低いのですが、多くのレンタルサーバーはCGIで動かしています。
理由を調べてみると、「小粋空間: PHP における「モジュール版」と「CGI 版」の比較 + WordPress の適用例」にて引用されている「DreamHostのカタチ〜良い鯖.com〜 – PHP」に次のように書かれていました。
ちなみに、中止した理由ですが、Apache module版だと、Dreamhost管理人がユーザごとのPHP負荷を計測するのが不可能なのが原因だそうです。
「CGIとPHP – Land.to非公式QandA」にも次のように書かれています。
mod_phpでは負荷をかけているユーザを特定しにくいため、サーバが重くなったときの対処が難しくなります。新サーバ方式なら誰のプロセスかすぐ特定でき、対処も容易で、サーバ全体への悪影響を最小限にできます。
つまり mod_php だとプロセスは Apache のプロセスになるので、たとえば ps コマンドで表示されるユーザも apache となり、負荷をかけてるユーザの特定がちょっと難しいというのが理由のようです。なるほど。
(追記) はてブのコメントに「局所化」ってのがあった。グローバル変数が他のプロセスから読み込まれる可能性があるとかそういうことかな?
コメントを残す