HimaJyun今回はこのブログが乗ってるWeb鯖(Apache)のmpmをpreforkからeventに切り替えましたCentは知りませんが、Ubuntuだと超簡単に切り替えが出来たのでご紹介しようと思います。eventだとPHPガーとか言われてますけど、FastCGIで動かせば普通に動きますよ!!このブログ(WordPress=PHP)が動いてるのがその証拠です。毎度の如く長々と前提条件の説明とかが入ります。やり方を知りたい方は「いざ、event!!」まで飛ばした方が良いですよ。PHP-FPM+FastCGIを設定する。切り替えた後はpreforkをやめた理由Keep-Aliveの所為で死にます、以上。余りにも不親切過ぎるので、理解してないなりに簡単に説明すると、preforkにはその仕組み上、避ける事の出来ない限界があります。同時に捌ける数を超えてアクセスがあると処理待ちに、ってのはどのmpmでも当たり前の話だと思います。その前提条件によって発生するのがKeep-Alive問題です。Keep-Aliveは、接続を切らずに複数のデータを転送して高速化しよう!!、と言う方法です。設定した時間だけ再度リクエストがあるまで待ち続けると言う訳です。仮に0.1秒でレスポンスを返せたとしても、Keep-Aliveが5秒だと5秒間は他のリクエストを捌く事が出来ません。そのため、必然的に「最大クライアント数/Keep-Alive(もしくはレスポンス)の待ち時間」が同時に捌ける接続数の限界になっちゃうわけです。(今頃のブラウザは5セッション同時に貼って来たりするのでなおさらマズい状況に陥る気がします。)かと言って、Keep-Aliveを切ってしまうとWebの表示が遅くなってしまいます。これでは本末転倒ですね。加えて、子プロセスを起こすfork、これは案外重たい処理です。言う訳で事前(pre)にforkするのでpreforkなのですが、瞬発的なアクセスの増加ではpreった分では足りません結果としてforkが頻発しちゃったり......かと言って、事前に叩き起こす分を増やせば良いかと言うとそうも行きません、C10K問題にぶち当たります。これらは上手い具合に調整すれば何とかなるかもしれませんが、各子プロセスは起きた時点で一定量のメモリを要求します。調整しても、プロセス数が増えればとどのつまりはメモリ不足などに陥る、と言う訳です。preforkによって発生する問題は、僕自身イマイチハッキリと理解してませんいくつか参考になりそうなページを乗せておくので目を通してみて下さい。@ITまぁ、workerでも良いんですけど、それだとKeep-Alive問題は健在らしいです。Apache2.4でeventが正式に採用されたので、このeventを採用してみようと思います。Nginxは?A:それを扱えるならばご自由にどうぞ。Nginx(エンジンエックス)は、巷で早い早いとやたら持て囃されているWeb鯖です。「WordPressをNginxでX倍速く」、もう見飽きたタイトルです。Nginxは元々静的コンテンツを高速で配信できるように作られています。動的コンテンツではそう大した性能向上が無かったりします。(もちろん、静的コンテンツはかなり速いですが)簡単に言うと、動的コンテンツにおいてネックになるのはプログラムでの処理やDBのI/O待ちであり、Web鯖の問題ではないため、どんなにWeb鯖を改善した所でそう大した性能差が無いのです、WordPressとかのCMSならなおさら。「遅い→Nginxにしよう」と言う短絡的な思考回路ではどう頑張ってもあなたのサーバは高速化しません。遅いのか、原因を突き止めて、適切なチューニングを施す事こそがサーバ高速化への近道ですよ。それではなぜ、「x倍速くなった」が溢れかえるかと言うと、これ系の記事を書いてる奴は決まってVPSの少ないメモリでメモリバカ食いするpreforkを使っていたり、Keep-Aliveの設定が不適切(デフォルト=300秒のまま)だったり、NginxやWordPressプラグインのキャッシュを使ってやがります。キャッシュを使えば第一にその動的な処理云々が発生しないので速くなるのは当然の事ですね、静的コンテンツに強いNginxならばなおさら。究極を行くなら、全部HTMLで静的コンテンツにする他ないですよ逸れて行った話を順番に戻します。単純に速くしたいだけならばNginxでキャッシュを効かせれば良いと思います。Nginxには動的モジュールの概念が無く、モジュールを入れ替える時はコンパイルし直さなければなりません。キャッシュを使えば更新がリアルタイムに反映されません、別に良いのですが、良くないです。加えて、Nginxには.htaccessとかも無く、configを直接編集して動かします。これらの動的な処理が無いのです、早いのは当然ですね。Nginx=魔理沙のマスタースパークです。まっすぐにしか飛びません、融通が利かないです。Apache=霊夢の夢想封印です。ホーミングするので融通が利きます。色々な事に手を突っ込んで足を洗うスタイルの僕にはNginxは扱いきれる気がしないので今回は見送り単純にWordPressでブログがしたいだけならさっさと戻るボタンを押してNginx+HHVMの記事を探すべきです。速くなる/速くならないを書きまくっちゃったので勘違いしない様に言っておくと、eventに切り替えたからと言ってApacheの動作が速くなる訳ではありません(多少速くなるらしいですが......)あくまで、C10KやKeep-Aliveで鯖ががががががが、とかを回避出来るだけです。preforkから切り替えるとメモリ消費は減るらしいので、性能の貧弱な鯖(VPSとか)は試す価値あるかもです。(このサイト含め)大したアクセスの無いサイトでは体感できる程の性能差は生まれませんけどね。ServerにLAMPでインストールしたApacheです。CGIを実行出来る様にさて、PHPをCGIで動かすのですよ、当然ながらCGIが実行できる必要があります。ExecCGI」を設定して下さい。以下の設定例を参考にして下さい。#このOptionsにExecCGIを追加して下さいね。combined&lt;/VirtualHost&gt;PHP-FPM+FastCGIを設定する。必要なモノをインストールします。apache2-mpm-event次に、エディタで「/etc/apache2/mods-available/fastcgi.conf」を開いて下さい。開いたら以下の内容を追記して下さい。granted&lt;/Directory&gt;多分、以下の様な感じになると思います。今までの設定だと、「/etc/php5/apache2/php.ini」が参照されていたと思います。php-fpmに切り替えると、「/etc/php5/fpm/php.ini」が参照される様になるので設定を更新しましょう。内容は同じ(だと思うので)以下のコマンドでコピーしてしまいましょう。/etc/php5/fpm/php.iniもし心配であればdiffとか使って差分を調べれば良いと思います。次に、fpmの設定を調整します。エディタで「/etc/php5/fpm/pool.d/www.conf」を開いて下さい。詰まっていると思いますけど、以下の点を変更して下さい。その他の設定項目は自分の理想に合わせて設定して下さい。fpmの実行ユーザ、Apacheの設定と合わせる方が無難だと思います。preforkと同じ感じ、負荷に応じて子プロセスを起こしたり寝かしたり。起こす子プロセスの最大数。500mpm_eventの設定を調整さて、せっかくのeventでもスレッドの数が不適切だと無意味です。スレッド数を調整しましょう。エディタで「/etc/apache2/mods-available/mpm_event.conf」を開いて下さい。以下の項目をお好きな様に調整してね。1000&lt;/IfModule&gt;設定を適用する以下のコマンドを実行して下さい。restart」でphpを再起動する必要があります。'MPM'」で確認できます。event」と表示されるはずです。PHPが正しくFastCGIになったかはphpinfo();で確認して下さい。API」の項目が「FPM/FastCGI」になっているはずです。実際にブラウザからアクセスしてみて、あなたのサイトが正しく表示されるか確認しましょう。表示されていれば設定完了です、何かエラーが出る時はエラーログを元に修正して下さい。良いですが、PHPをFPM/FastCGIに切り替えると、HTTP300の時にファイル候補としてセットされる「$_SERVER['REDIRECT_VARIANTS']」が「$_SERVER['REDIRECT_REDIRECT_VARIANTS']」になります。バグ......なのかな?、こんな変数使う事滅多に無いから気付かれてない?まぁ、配列のキーが変わっただけで中身は同じなので気にする必要ないとは思います。前回の「......続きを読む→PREV[Minecraft]トロッコの中身が空になるまで停車させる方法NEXT正しく圧縮、素早く送信、mod_deflateの設定方法ナカのヒト:HimaJyun​散って美しいのは桜だけです、情報はまとまっていた方が美しいのです。