今回、Apacheが2.2系から2.4系にアップデートされてました。この契機に、Apacheの設定を最適化してみたいと思いUSEフラグを調べてみました。MPMってなんじゃ?
Multi Processing Moduleという名称からも分かるように、mpmとはapacheの並列処理を行うmoduleです。
なるほど。並列処理を高速化するためのモジュールなのね。今まで有効化してなかったので、使ってみようということにしました。んで、prefork/worker/event/itkとかいろいろあるが…どれがいいんだろか。
個人的な注目はevent MPM(とAsynchronous support)です。いわゆる非同期I/O動作のイベントドリブンなmpmです。
ほほう…event MPMがいいのね。。。ってことでMPMにはeventを選択。で、これでApache設定しちゃえばいいのかしら
なぜ、Apache 2 のマルチスレッド MPM モードを実運用環境で使用するべきではないのですか?
PHP はグルー(糊)です。このグルーは、多くのサードパーティ製のライブラリを くっつけることによりクールな Web アプリケーションを構築するために使用され、 直観的で簡単に習得できる言語インターフェイスにより、一つの整合性のある実体として 見せることができます。 PHP の柔軟性と力は、プラットフォームの安定性と堅牢性に基づいています。 グルーによる結合をするためには、OS や Web サーバー、サードパーティ製のライブラリを 必要とします。 これらの一つの機能が停止した場合、PHP は問題を特定し、速やかに修正する 手段を必要とします。 実行スレッドを完全に分離しなかったり、 メモリセグメントを完全に分離しなかったり、 各リクエストで使用される強力なサンドボックスを有さないことで、 基本的なフレームワークをより複雑なものにした場合、 PHP のシステムに弱点が生まれます。
マルチスレッド MPM を使いたい場合は、 PHP が自分のメモリ空間で実行される FastCGI の設定をみてください。
え…ダメなの…FastCGIってのを使えってか…それ、どうやって設定すればいいんだろか…mini-HOWTO for setting up PHP-FPM with Apache on Gentoo あら、あるじゃない。やってみようかね~と。ついでに他の高速化手法あるのかしら
ほほう…いろいろあるじゃないの…と言うことで
- Apacheのevent MPM化
- PHPのFastCGI設定
- PECL APCのインストール
にチャレンジしてみました。
ちなみに、設定に関して大きなトラブルが。Apacheのアクセス制御ディレクティブである、
Order Allow,Deny
Allow from all
が廃止となってしまいました。Apache2.2→2.4へのバージョンアップに伴い、mod_access→mod_authz_coreに変更になったことが原因。お陰で全てのページがAccess Deniedに。上記箇所の記載を
Require all granted
に変更する必要があります。気をつけてね!
さて、設定は別途Wikiに記載するとして…結果、一応動いたのですがァ。PHPのFastCGIが完全には期待通り動きませんでした。それは…このWordPressのページが
Premature end of script headers: index.php,
というエラー吐いてうまく動いてくれなかったからです。Internal Server Errorになってしまう…と、いうことで、
Apacheのevent MPM化とPECL APCの導入は出来たのですが~、FastCGI化はできませんでした…これでまともに動くかしら…と不安なのですが、一応Zend Thread Safetyというオプションが入っていればスレッドセーフになってるはず、と言うことでGentooのPHPはどうなのだ?と調べてみたのですが、phpinfo関数の出力結果を見てみたところ、Thread Safety enabledになっていたので、まぁいいのかな、と言うことでしばらく運用してみることとしました。
落ちなきゃいいけどなァァ
HTTPリクエストのレスポンス向上して、快適ブラウジングになるように祈るとです…不安だなぁ…