ApacheのMPMをeventからpreforkに戻した

※記事内に商品プロモーションを含む場合があります

ApacheのMPM、マルチプロセッシングモジュール。
現在三種類あります。

古くからあるprefork。
マルチスレッドなMPM、worker。
最新のMPM、eventの三種類です。

前まではpreforkでしたがphp_fpmをインストールしたら
スレッドセーフとなったのでeventに変更しました。

ApacheのMPM,eventとprefork

eventMPMに変更後

eventMPMはマルチプロセス+マルチスレッド対応のMPM。
一番効率が良いと言われていて、早いと言われるnginxと同じ仕組の様です。

一番大事な接続数の設定はpreforkの70から
200まで大きくしました。

もちろん、abコマンドで負荷を掛けロードアベレージが一定で維持する
接続数にしました。

その接続数以上の接続をするとロードアベレージが右肩上がりに上昇します。

高負荷が多発

前に何回かサーバーを落とした事があったので現在
サーバーモニタリングを行っていて、ロードアベレージが3以上に上がると
iPhoneにメールが飛ぶ様になっています。

eventに変えた後のとある日、続々と届くメール。

サーバの高負荷を伝えるメールが続々と届く。

preforkの頃に比べ、
アクセスの少ない時のロードアベレージも少し高めだったので気になっていました。

モニタリングの仕様として一度メール送信したらロードアベレージ(1分)が
0.5を下回るまでメールを送信しない様になっています。

しかし、何回も送信されると言う事はロードアベレージが上がったり下がったりを
繰り返していると推測されます。

preforkに戻した

あまり高負荷が多くあると精神衛生上良くないので元に戻しました。

やはり、WordPressなど動的なサイトはPreforkの方が
良いのでは無いかと思います。

サーバの負荷を下げ、WordPressを早くするにはキャシュを使うのが一番。

preforkに戻して10日ぐらい経過しますが、故意に負荷を掛けた以外では
ロードアベレージ上昇通知のメールが来る事はありません。

と思ったらこの記事を投稿する時に高負荷を伝えるメールが届きました。
ロードアベレージ3.1以上になった様ですがすぐに下がりました。

あとがき

爆速にしたいならnginxリバースプロキシが一番早いと思います。

ただ、Apacheは.htaccessが使えるので便利。
.htaccessを多用する事でApacheの処理速度を落とす原因にも
なっているのですけどね。

何時か、サーバ入れ替え時にはまた、eventにするかもしれません.
現在動いているサーバをいじくり回す勇気は無いので当分はPreforkのままです。

追記

その後、モジュール版PHPからPHP-FPMに変更し
MPMをeventに変更しました。

現在はevent+PHP-FPMで半年以上運用していますが
比較的安定しています。

モジュール版だと、MPMのプロセス、スレットごとに
PHPモジュールが立ち上げられるので不安定になりやすいようです。

スレッドセーフでないPHPの場合はpreforkの方が良いです。