Reverse Proxy と mod_perl の MaxClients

NDOメソッドっぽく質問されてたので答えてみる。

あと聞きたいのは(←ずうずうしい…)、アプリケーションサーバとかリバースプロキシサーバとかのapacheなどのMaxClientsをどのくらいにしているのかですね。カリカリにチューニングしているのか、ハイパフォーマンスMySQLでJeremyさんがYahoo! comのことを書いてた様に1台当り MaxClients 30 ぐらいしか立ち上げてないのか。

リバースプロキシはメモリの許すギリギリのラインまで MaxClients を上げて設定してます。スタティックな一定のコンテンツを返すあるいは Rewrite するのが仕事のほとんどなので、CPU パワーや I/O もほとんどかからず、最近のスペックのマシンであればリバースプロキシの性能はメモリ量に完全に依存してる感じです。

ので、MaxClients の数がなるべく稼げるように子プロセスのサイズを極力小さくしたい、ということで必要のないモジュールは全部 OFF にして、というチューニングはやってます。lighttpd で Reverse Proxy というのをちょっとやってみたい。

一方の mod_perl の方ですが、こっちもメモリの上限を見て設定ってことには変わらないのですが、実際には KeepAlive Off な環境では、MaxClients を 50 とかにしててもそれに到達するケースは裏の DB に障害がおきて httpd のプロセスがコネクトのところでひっかかってたまりまくってるという時ぐらい。普通に裁けてるときはアクセスが増えても 10 〜 20 のところを推移します。

それ以上プロセス数が必要になるぐらいのアクセスがくると、CPU とかその辺がボトルネックになるので、結局 mod_perl 側は MaxClients の値は性能を上げるために使うというより、メモリを使い尽くしてマシンがハングアップしたりしないように、設定している、という感じです。