「ApacheってCentOSだとなんでパッケージ名がhttpdなのよ。。
apacheでええやん。Ubuntuみたいに。」
というわけでまったく関係ない話から入りましたが、
今回はApacheのチューニングについて超分かりやすくブログします。
■チューニングしないとどうなるの?
映画「ソーシャル・ネットワーク」でもマークさんはこんなこと言ってます。
「新しいサーバ契約した?apacheの負荷テストしたいんだ。」
Facebookとか大規模サービスの場合、大量のアクセスが来ます。
チューニングしないとswapが跳ね上がったりしてサーバが固まったり、
サイトにアクセスできないとかいろいろ起こります。
まあスケールアップとかスケールアウトなどいろいろ方法がありますが、
今回は置いときましょう。
■Apacheの仕組みについて
親プロセスを1つ持ち、クライアントからリクエストが来ると
自分自身をコピーして子プロセスを起動する。
実際の通信は子プロセスが受け持ち、通信している数だけ子プロセスが起動する。
簡単に言うと、自分自身を分身する感じ(影分身的な)。でも限界がある。。。
■MPMについて
MPM(Multi Processing Module)
環境やOSによる機能や実装の違いをモジュール化し、
利用する環境に対応できるようにした仕組み。
ApacheHTTPサーバ2.0から採用。
代表的なのが・・・?
■prefork
超定番ですね。PHP使うならこれが推奨される。
クライアントからリクエストを受けた後に子プロセスを起動すると
完了までに待ち時間ができて通信のパフォーマンスが低下するため、
あらかじめ子プロセスをいくつか起動させておく。
・デメリット
クライアント数が多くなると子プロセスの数も増えるので負荷がかかり、
大量のメモリや高速なCPUが必要になる→スケールアップ的な
要するに重いという・・・
・その他のMPMは?
worker,eventなどなど
■性能パラメータを設定する
まずはMPMどんなの使っているのか確認しましょう。
1 2 |
# apachectl -V |grep MPM Server MPM: Prefork #ぷれふぉーく! |
1 |
# more /etc/httpd/conf/httpd.conf |
1 2 3 4 5 6 7 8 |
IfModule prefork; StartServers 8 MinSpareServers 5 MaxSpareServers 19 ServerLimit 256 MaxClients 256 MaxRequestsPerChild 4000 IfModule |
こんなのがあるはず。
では見ていきましょう。(デフォルト高すぎ!)
■StartServers
起動時に生成される子プロセスの数。
子プロセス数は負荷に応じて動的に変化する。
→意味ないやん
動かす数に設定すればとりあえずいいかと。
■MinSpareServers
アイドル状態にいる子サーバプロセスの最小(希望)個数。
→影分身頼んだぞ!がんばれ!
アイドル状態の子プロセスが足りなければ、
最高で1プロセス/秒のペースで新規に子プロセスを生成する。
■MaxSpareServers
アイドル状態にいる子プロセスの最大(希望)個数。
→影分身頑張ったな!
アイドル状態の子プロセスの数がこの値をこえた時は子プロセスを殺せええええ!!!
数値は大きいとアカンかも。
■MaxClients
応答される同時リクエスト数(子プロセスの最大数)
■ServerLimit
MaxClientsに指定可能な値の上限。
→MaxClientsより大きい数でOK
あんまり大きいと不安定になる・・・
■MaxRequestsPerChild
個々の子プロセスが扱うことのできるリクエストの総数。
→子プロセスが起動してからこの数だけリクエストを捌くと・・・・
死亡
無制限(0)にするとforkされる回数がダイブ減る。
■ まとめ
子プロセス確認はpsコマンドですね。
次回はチューニング算出方法とかブログしたいと思います。
(・∀・)つ bye
参考資料:http://httpd.apache.org/docs/2.2/ja/mod/prefork.html
0件のコメント