「ApacheってCentOSだとなんでパッケージ名がhttpdなのよ。。
apacheでええやん。Ubuntuみたいに。」
というわけでまったく関係ない話から入りましたが、
今回はApacheのチューニングについて超分かりやすくブログします。


■チューニングしないとどうなるの?

映画「ソーシャル・ネットワーク」でもマークさんはこんなこと言ってます。
「新しいサーバ契約した?apacheの負荷テストしたいんだ。」
Facebookとか大規模サービスの場合、大量のアクセスが来ます。
チューニングしないとswapが跳ね上がったりしてサーバが固まったり、
サイトにアクセスできないとかいろいろ起こります。
まあスケールアップとかスケールアウトなどいろいろ方法がありますが、
今回は置いときましょう。


■Apacheの仕組みについて

親プロセスを1つ持ち、クライアントからリクエストが来ると
自分自身をコピーして子プロセスを起動する。
実際の通信は子プロセスが受け持ち、通信している数だけ子プロセスが起動する。
簡単に言うと、自分自身を分身する感じ(影分身的な)。でも限界がある。。。


■MPMについて

MPM(Multi Processing Module)

環境やOSによる機能や実装の違いをモジュール化し、
利用する環境に対応できるようにした仕組み。
ApacheHTTPサーバ2.0から採用。

代表的なのが・・・?


■prefork

超定番ですね。PHP使うならこれが推奨される。

クライアントからリクエストを受けた後に子プロセスを起動すると
完了までに待ち時間ができて通信のパフォーマンスが低下するため、
あらかじめ子プロセスをいくつか起動させておく。

prefork

・デメリット

クライアント数が多くなると子プロセスの数も増えるので負荷がかかり、
大量のメモリや高速なCPUが必要になる→スケールアップ的な

要するに重いという・・・

・その他のMPMは?

worker,eventなどなど

■性能パラメータを設定する

まずはMPMどんなの使っているのか確認しましょう。

こんなのがあるはず。
では見ていきましょう。(デフォルト高すぎ!)

■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

The following two tabs change content below.

あだちん

1989年生まれ。 Infra Engineer(SRE) In Shibuya 2013年新卒に自宅サーバを構築し、この技術ブログを立ち上げたが、 2017年に電源が壊れConoHaにリプレイスした。 好きな構成管理ツールはAnsible,Terraform。 インフラならAWS/Docker。言語はPython。 WEBサーバならH2O。そして「脆弱性スキャナVuls」のOSS活動もしており、VulsRepo init fileのコミッターでもある。VulsのためにGolangと格闘中でエバンジェリストに任命!?HIPHOPが好きすぎてTrack Makerでもある。

コメントを残す