ちょっと遊んでみる感じで、マルチプロセッシングモジュール(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 から投稿