ニクニクドットミー

カッコいいおっさんを目指すエンジニアの厳かなブログ

apache preforkパラメータについてのメモ

Apache log

前回、apacheのMaxRequestsPerChildを検証してみたというタイトルで、MaxRequestsPerChildを軽く試してみました。

他にもいくつかパラメータがありましたので、それらの意味をメモっておきます。


<IfModule prefork.c>
StartServers       5
MinSpareServers    5
MaxSpareServers    5
ServerLimit        5
MaxClients         5
MaxRequestsPerChild  5
</IfModule>



パラメータ 説明 補足
StartServers 起動時に生成される子サーバプロセスの数 StartServers ディレクティブは、 起動時に生成される子サーバプロセスの数を設定します。 プロセス数は負荷に応じて動的に制御されますので、 通常はこの値を調整する理由はあまりないでしょう。
MinSpareServers 待機時の最小子プロセス数 子プロセスがMinSpareServersより少なくなったら、この値まで子プロセスを上げます
MaxSpareServers 待機時の最大子プロセス数 子プロセスがMaxSpareServersより大きくなったら、この値まで子プロセスを下げます
ServerLimit 設定可能なサーバプロセス数の上限 MaxClientsを256以上に設定したい場合はServerLimitも設定する必要があります。また、 MaxClientsの上に書かないと効きません
prefork MPM の場合は、このディレクティブは Apache プロセス稼働中における MaxClients に設定可能な上限値を設定することになります
MaxClients リクエストに応答するために作成される 子プロセスの最大個数 MaxClients ディレクティブは、 応答することのできる同時リクエスト数を設定します。 MaxClients 制限数を越えるコネクションは通常、 ListenBacklog ディレクティブで設定した数までキューに入ります。 他のリクエストの最後まで達して子プロセスが空くと、 次のコネクションに応答します。
スレッドを用いないサーバ (すなわち prefork) では、MaxClients は、リクエストに応答するために起動される 子プロセスの最大数となります。 デフォルト値は 256 で、これを増加させたい場合は、 ServerLimit の値も増加させる必要があります

※いまの設定値はダミーで設定してます。 またこれらのパラメータの値は揃えた方がいいです。 理由は、forkは重い処理なので、出来るだけforkさせない為です。 とても分かりやすく説明してくれている記事がありましたので、記載しておきます。 プロのサーバ管理者がApacheのStartServers, (Min|Max)SpareServers, MaxClientsを同じにする理由

こう思った

前回はMaxRequestsPerChildを調べましたが、他にもたくさんあったので、調べてみました。 基本はすべての値(RequestsPerChild以外)は揃えるのがベターのようです。 WEBサービスボトルネックなるのはDBが多いと思うので、apacheのチューニングはあまり無いような気がしてます。 でもチューニングできるとカッコイイと思うので、する機会あればしてみたいと思います。

参考 ・httpd.confについて調べたのでまとめたよ