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