MPMをpreforkからworkerへ切り替えて運用し始めてみる。

ちょっと遊んでみる感じで、マルチプロセッシングモジュール(MPM)を変更してみました。

使用するサーバーはFedora20 x64
Apache2.4です。

先ず、当サーバーのMPM切り替えは、
/etc/httpd/cond.modules.d/00-mpm.conf に記述があるので、そちらからPreforkとWorkerを切り替えます。

 

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
と記述があるので、そこをコメントアウトします。
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

次にコメントアウトされている
#LoadModule mpm_worker_module modules/mod_mpm_worker.so これの#を削除。
LoadModule mpm_worker_module modules/mod_mpm_worker.so

この状態にして保存し、
systemctl restart httpd
でサービスを再起動します。
両方コメントアウトされてる状態だとエラーで起動できないので、必ず使わない方をコメントアウトして下さいね。

httpd -V
コマンドで動作状態が確認できますので一度見てみます。

[root@WingsOfBlueFlame ]# httpd -V
Server version: Apache/2.4.* (Fedora)
Server built:
Server loaded:
Compiled using:
Architecture:   64-bit
Server MPM:     worker

workerで立ち上がってることが確認できました。
このまま使ってもいいのですが、初期設定の状態で、動的コンテンツへのF5テロや大量アクセスされた際にメモリーを食いつぶされ、SWAP地獄になることもあるので要注意です。

メモリ8GB積んでるのですが、負荷テストの為に最大250ユーザーアクセス負荷テストを行った際に大変なことになりました。(SWAP地獄)
というわけでパフォーマンスチューニングを実施してきます。

/etc/httpd/cond.d/mpm.conf に、次の設定を施しました。

<Ifmodule worker.c>
ServerLimit 6
StartServers 4
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 512
</Ifmodule>

ServerLimitの算出法は、MaxClients ÷ ThreadsPerChild
自分の環境に合わせて設定してください。でないとあっという間にSWAP地獄です。

設定有効にするにはApacheを再起動します。
systemctl restart httpd

ところがどっこい、今度はPHP以外のコンテンツで、CGIが503エラーを返すようになりました。

というわけで、/etc/httpd/cond.modules.d/01-cgi.conf の中身を覗いていきます。
LoadModule cgid_module modules/mod_cgid.so

LoadModule cgid_module modules/mod_cgid.so

LoadModule cgi_module modules/mod_cgi.so

このように記述されていました。
preforkの時はmod_cgi.soが利用されていたようですね。

じゃあworkerの方を同じように書きかえりゃいいんじゃね?という浅はかな考えで変更。
LoadModule cgi_module modules/mod_cgi.so
#   LoadModule cgid_module modules/mod_cgid.so

とこんな感じに変更しました。
すると・・・・?

なんということでしょう!
CGIが正常に動作しているではありませんか!

というわけで、これにて(今のところ)不具合もなく動き出したので一件落着といきます。設定色々弄っててCGIがエラーを起こさない数値があったのですが、誤ってそちらの数値を消してしまい申した(ぁ

WordPress for Android から投稿

コメントを残す