web-dev-qa-db-ja.com

Apacheの最適化-プリフォークMPM

Apacheの構成に関する多くの投稿を読み、サーバーに最適な値を見つけようとしました。何が最適かを確認するために、 JMeter を使用して1秒あたり2100接続をシミュレートしました。何度も微調整した後、次の構成になりました。

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   10
ServerLimit     2048
MaxClients       2048
MaxRequestsPerChild  20000
</IfModule>

サーバーの詳細:

[root@web06 ~]# free
                 total       used       free     shared    buffers     cached
    Mem:       3814660    1070152    2744508          0     146788     766944
    -/+ buffers/cache:     156420    3658240
    Swap:      5210104          0    5210104
[root@web06 ~]# grep -c processor /proc/cpuinfo
4
[root@web06 ~]# uname --a
Linux web06 2.6.18-164.el5PAE #1 SMP Thu Sep 3 04:10:44 EDT 2009 i686 i686 i386 GNU/Linux

単一のApacheプロセスで使用されるメモリ:

[root@web06 ~]#  cat /proc/5903/status  | grep VmRSS 
VmRSS:     10076 kB

構成が少し高いことは知っていますが、構成によってストレステストで最良の結果が得られました。ご意見をいただければ幸いです。何か変更する必要がありますか?

注意-Apacheに代わるより良い方法があることは知っていますが、現時点ではこの種の変更を行うためのリソースがありません。

ありがとう!

2
Kuf

さて、あなたのサーバーは2048の同時Apacheプロセスを実行することができますか(ServerLimit/MaxClientsで設定したように)?そうではなく、実際にはそれほど多くの同時Apacheワーカーは必要ありません。 nginxlighttpdのような非同期リバースプロキシをセットアップして、その非同期プロキシへの接続が遅いクライアントの処理をオフロードすることを強くお勧めします。そして、ほとんどのパブリックWebクライアントは、すでに生成されたコンテンツのアップロードを処理するためだけに、Apacheワーカーのほとんどの時間を費やすのに十分遅いと信じています。また、リバースプロキシを適切に設定すれば、25を超える同時Apacheワーカーが必要になることはないと思います。

2
Alex