ゴールデンウイークはどこが黄金なのか一度聞いてみたいです。姜子牙です。
休めるだけマシな方だと思ってます。
さて、サーバパフォーマンスチューニングApache編第二回となります。
今回は
2、待機プロセス数の変更について
です。
さて、今回の待機プロセス数の変更は以下より分身になぞらえて進めていきたいと思います。
待機プロセスとはなんだろう?と言うと、Apacheは実行ファイル自体は一つなのですが
実際に動き始めると、一人が親玉になって、分身を始めるのです。
その分身一人一人がアクセスしに来た人に対応して、データを返す処理をします。
(スレッドを使用すると一人が複数人の対応をしたりするのですが、ややこしくなるので割愛します)
ここで、アクセスに来るのを待ちつつ何もしていない分身を待機プロセスと呼びます。
まず仮に分身の数を極端に減らすとどうなるかと言うと、一度にたくさんのアクセスがあった場合に、Apacheはその段階で分身を始めます。でも分身には時間がかかるのです。アクセスしにきたユーザは、分身が完了して対応を開始してくれるまで「サーバからの応答を待っています」の状態で待たされることになります。つまり、アクセス数の増加に対応するためには(特に急激な増加は)、分身は常にたくさん居た方がいいわけです。
では逆に分身が多いとどうなるかと言うと、分身を維持するためのメモリが必要になります。もしサーバが持っているメモリ量を超えるほどApacheが分身を抱えてしまうと、SWAPが走り始めサーバ全体の処理が重くなります。もちろんアクセスしに来たユーザは遅いサーバの応答に待たされることになります。
メモリはApacheだけの物ではなく、その他のソフトも使用するため、Apacheだけを考えて分身の数を決めることはできません。
これらを踏まえて、実際のhttpd.confで設定する値を見ていきます。(今回はprefork.MPMの値に絞ります)
○StartServer
サーバ起動時の分身数。すぐに変更されるため、適当で良い。
○MinSpareServer
最少待機分身数。Apacheは常にこの数以上は待機している分身がいるように分身数を調整する。
○MaxSpareServer
最大待機分身数。Apacheは常にこの数以下の待機している分身になるように分身数を調整する。
○ServerLimit
最大稼働分身数。ユーザ対応をしている分身はこの数が上限になる。
※ServerLimit+MaxSpareServerが最大分身数になる。
○MaxRequestPerChild
分身一人がユーザ対応する件数。0だと無制限。ここで設定した回数のユーザ対応をするとその分身は消える。
(メモリリーク、徐々に使用可能メモリが減っていく場合、この周期を短くして対応する)
これらの値を調整しつつ、Microsoft Web Stress Toolを使用して、100人同時アクセスなどを再現し、
topコマンド等でサーバの状態を図り、再調整という流れでチューニングを行いました。
また、待機プロセス数の変更以外にDeflateモジュールを使用してコンテンツの圧縮転送も実施しています。(項目増えてるやん、という突っ込みはスルーの方向で)
プログラム側の変更を行わず、Apache側の変更のみでMINEタイプやUser-Agentを判定してコンテンツを圧縮して転送することができます。
Jpeg等の圧縮済み画像ファイルはDeflateモジュールを使用しても圧縮効果が薄いため今回Deflateの対象としているのは text/html text/planeのみとしています。
PHPとかどうなるんだろう?と思うかもしれないですが、サーバ側でPHPの処理が完了し、HTMLとして出力されたデータをこのモジュールが圧縮をかけるので、上記の指定でOKです。
ただ、圧縮処理なので回線への負荷は下げられるものの、CPU使用率は増えてしまいます。(回線の転送量は、圧縮レベル9で約1/3の転送量に下がった試験結果が出ています)
まだ、Apacheのチューニング方法はあるかと思いますが、今回はこのくらいで・・・。次回はMySQLの方に触れたいと思います。
[べきこ](´∀`) < 「せんせー、テストケースの内容がわかりません」
[姜子牙](#゚Д゚) < 「ググレカス」
[べきこ](´∀`) < 「日本語としてわかんないですけどー」
[姜子牙](;’-') < 「え・・・ちょっとまってね・・・」
はい、言ってみたいです。
姜子牙 未分類