web-dev-qa-db-ja.com

Apache prefork最適化-適切な `MaxRequestsPerChild`値の選択

私はできるだけ多くの接続を処理するようにWebサーバーを最適化しようとしています。私は多くの投稿とApacheのメモを読みました。 MaxRequestsPerChildに選択する値を理解しようとしています。

最初は4,000に設定してみましたが、サーバーが多くのリクエストを処理するのが難しかったので、上げ始めました。現時点では、私の設定は次のとおりです。

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  40000
</IfModule>

MaxRequestsPerChildを40,000に設定した後、サーバーはより多くのメモリ/ CPUを使用せずに、より多くの接続を処理することができました。

この値が高すぎるのか、それとも高値でよいのかを誰かに教えてもらえますか?

ありがとう!

OS情報:

[root@web06 ~]# uname -a
Linux web 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux
[root@web06 ~]# free
             total       used       free     shared    buffers     cached
Mem:       3814660    3502968     311692          0     144368    2970468
-/+ buffers/cache:     388132    3426528
Swap:      5210104          0    5210104
9
Kuf

MaxRequestsPerChildは、動的スクリプトを実行するときに、時間の経過に伴うメモリリークの量を制限するためにのみ実際に役立ちます。静的コンテンツまたは非常に小さい/単純なスクリプトを提供するだけの場合は、おそらくそれを0または非常に高い値に設定しても、大きな影響はありません。より大きな/複雑なスクリプトを実行している場合、0/highに設定すると、Apacheプロセスがますます多くのメモリを消費することになります。正確にどれだけ多くが特定のアプリケーションに依存します。

一方、非常に低く設定すると、Apacheプロセスが常に再起動されるため、実際にはCPU使用率がわずかに多くなる可能性があります。

プロセスで使用できるメモリ量を確認する簡単なテストを行います。 MaxRequestsPerChildを0に設定し、Apacheを再起動します。数ページをテストして読み込み、Apacheプロセスの初期サイズがtopを使用しているサイズを確認します。数時間/数日/数週間後(アプリケーションとページビューによって異なります)に再度確認し、それがどのように成長するかを確認します。それがあまり大きくならない場合は、MaxRequestsPerChildの0または非常に大きな値で問題ありません。

Apacheプロセスの最大サイズが設定されている場合(つまり、50MB以下にしたい場合)、Apacheを小さく保つ値が見つかるまで、MaxRequestsPerChildのさまざまな値で同じテストを実行できますそれ。

10
uesp