タグ:"apache" で記事を検索

Apacheをチューニング(Prefork)
2008.10.17 04:20 | server, apache

前回の続きです。

http://httpd.apache.org/docs/2.0/ja/mod/prefork.html
スレッドを使わず、先行して fork を行なう ウェブサーバを実装しています。 スレッドセーフでないライブラリとの互換性をとるために、 スレッドを避ける必要のあるサイトでは、このモジュールの使用が適切でしょう。

本家のウェブにこんなことが書いてありますが、僕は基本的にスレッドセーフでないPHPを使用しているため、preforkの使用をしています。PHPを使用しない場合はworkerを使用した方がたぶんいいと思いますが、使用したことがないのでここでは説明をさけます。。

StartServers 5
MinSpareServers 5
MaxSpareServers 10
ServerLimit 256
MaxClients 256
MaxRequestPerChild 10000

StartServersはサーバが起動したときに生成される子プロセスの数です。
負荷があがると自動的に数は増えていくので特に設定する必要はないと思われます。

MinSpareServers/MaxSpareServersはアイドル状態の子プロセス数を制御するパラメータです。
MinSpareServersよりもアイドル状態の子プロセスが少なくなると親プロセスが新しい子プロセスを生成します。新しく生成されるのは1秒に一度のため、高負荷のウェブサーバの場合応答が間に合わなくなる可能性があります。
このパラメータはチューニングしがいのある部分で、高負荷サーバでは応答速度に変化が見られる場合がありますが、そこまで高負荷でない場合は触る必要のない項目であります。

ServerLimit/MaxClientsは、リクエストに応答するための子プロセスの最大数です。
preforkの場合は、この値が同時アクセス数の値になるので、チューニングができる項目になります。
デフォルト値は256となっていますが、メモリ容量とのからみもあるので安易に増やすとPHPが実行できないなどの状況に陥ってしまいます。
例えば、2Gのメモリを搭載しているサーバで、PHPのmemory_limitに32Mを当てている場合、OSに使用するメモリを考えて1.5Gをウェブサーバで使用させるとすると・・・
2G / 32M = 46プロセス
になります。256プロセスデフォルトのままで運用してしまうと、同時アクセスがマックスになるとPHPがメモリエラーをはいてしまう可能性もある感じになります。
(PHPがマックスまでメモリを使用していればの話ですが)
ServerLimit/MaxClientsの値と、memory_limitは連動してくるお話になるので、両方を注意しながら地道にチューニングしていくと、同時アクセス数も調整できて、サーバがどのくらいさばけるのかが把握できるのでとても幸せ気分になれます。

最後にMaxRequestPerChildですが、これは子プロセスが再起動する頻度を設定する項目です。
プロセス再起動には時間がかかるので、再起動の間に大量アクセスがきていたら大変です。
が、メモリリークがおこってしまった場合などの対処用に設定をしておいたほうがよい項目です。
デフォルトでは10000が設定されていますが、10000回プロセスにアクセスがされたらプロセスの再起動を行う設定になっています。
あまり設定する必要のない項目ではありますが、error_logでエラーが頻発しているようだったらこの値を変更してみて挙動をウォッチする手もあると思います。


ざっくりと書いてきましたが、ほとんど本家ウェブサイトに書いてあることの転載なので、詳しくはそちらを参照した方がいいかもしれません。
チューニングは実行するウェブアプリケーションによっても違ってきますし、搭載しているメモリ容量などにも関連してくるので、教科書通りにいかないというのが経験上いえることです。
ちょっとずつ値を変更して最適なパラメータを見つけるのも楽しみの一つであるので、地道にやるのが一番いいのかなーと。


次回は・・・なにをやりましょう。。。

Apacheをチューニング(KeepAlive)
2008.10.15 01:15 | server, apache

ウェブサーバのレスポンスが遅くなったときにどのようにしたら早くなるのか。
一時期かなり悩み悩み、色々試行錯誤をしたのですが、メモ程度にやったことを書いておこうと思います。
遅くなっているウェブアプリケーションによって、設定方法も変える必要がかなりあって、あまりにもパターンがありすぎる感があるけども、何かの参考になれば・・・

設定対象のファイルは httpd.conf になります。

今日は KeepAlive の設定について。
ウェブサーバは基本的には1ファイルごとにセッションを接続ー切断を繰り返して、処理を行うものですが、この設定を加えてあげることでセッションを切断せずに通信できるようになります。

KeepAlive On
MaxKeepAliveRequests 30
KeepAliveTimeout 5

上記設定では、30リクエストごとにいったん切断を行い、30リクエストに満たなくても5秒間でセッションを切断する設定になっています。
注意すべき点としては、MaxKeepAliveRequestsをきちんと設定してあげることです。
ページの表示が完了するまでに、画像ファイルやCSSなどのファイルも含めて、そのサーバから何ファイル出力されるのかを把握する必要があります。一番多いリクエストに合わせて、少々余裕を持たせた数字にしておくのがいいと思います。
セッションを保持したままにするということは、その間はプロセスが占有されているままになるということなので、これもまた注意が必要です。なので、KeepAliveTimeoutを設定して、リクエストが来なくなったらリリースしてあげる仕組みになっています。

ブログパーツのリクエストが多い場合や、携帯サイトの場合はあまりこの設定は意味がないかもしれません。ブログパーツはswfファイルの読み込みのみだったりするので、1リクエストで終了してしまう方が多いと思いますし、携帯は回線が遅いので、一回ずつ処理をしたほうが、プロセスをガメる量が減らせますし。

実環境でテストしながらでないとなんともいえない部分なので、参考程度ということで。


次回は prefork とか行ってみようと思います。

タグ一覧