F.Ko-Jiの「一秒後は未来」

共用レンタルサーバーの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 となり、負荷をかけてるユーザの特定がちょっと難しいというのが理由のようです。なるほど。

(追記) はてブのコメントに「局所化」ってのがあった。グローバル変数が他のプロセスから読み込まれる可能性があるとかそういうことかな?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など