“人間とウェブの未来 - ApacheとNginxの性能比較でevent_mpmの本気を見た”についての議論

2
まつもとりー / Ryosuke Matsumoto @matsumotory

書いた / “人間とウェブの未来 - ApacheとNginxの性能比較でevent_mpmの本気を見た” http://t.co/TL6ttnDc

2012-10-31 11:25:32
藤枝和宏 @kfujieda

@matsumotory ServerLimitはforkするサーバーの数です。60000に設定する意味ないです。ThreadsPerChildを2のまま接続数を増やすとプロセス数が増えるので性能出ないです。

2012-10-31 13:02:45
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda event_mpm上ではseverlimitを増やさないと、maxrequestworkersをそれ以上増やす事ができません。それをクリアにする方法はseverlimitを増やす以外にありますか?

2012-10-31 13:08:35
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda event_mpm的には一つのスレッド上で複数のリクエストを同時に処理する多重IOのアーキテクチャをとっているので、その辺りの実装は不完全とはいえ本来スレッドをコア数以上に増やす必要がないと思ったので2にしています。

2012-10-31 13:12:43
藤枝和宏 @kfujieda

@matsumotory MaxRequestWorkersの多すぎと、ThreadsPerThildの少なすぎがその原因です。数字のバランスが取れていないからエラーになるのです。

2012-10-31 13:15:41
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda worker_mpmだとそうですが、同時接続数を万のオーダーかつコアの数のスレッドでそれぞれのスレッドが多重I/Oするモデルを想定したevent_mpmでは、こういう設定になると思いますが。もちろんスレッド数に依存するなら増やす必要がありますし追記もしています

2012-10-31 13:30:13
藤枝和宏 @kfujieda

@matsumotory スレッドあたりの多重I/Oの数を増やしたかったらMaxRequestWrokersを増やしてはだめです。この記事の実験例なら250もあれば足りるはずです。

2012-10-31 13:36:48
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda 僕の知識不足だとは思いますが、MaxRequestWorkersを増やさずにスレッド数は固定で多重I/Oの可能数を増やす方法ってありますか?今からちょっと試せるので試してみます。

2012-10-31 13:43:34
藤枝和宏 @kfujieda

@matsumotory MaxRequestWrokersは多重I/Oとあまり関係ないです。多重度は16(たぶん)で固定で、使えるスレッドが少ないとeventは多重度を上げていきます。スレッドが足りなくなるとフォークします。

2012-10-31 13:48:06
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda おっしゃっていることが分かってきました。結局の所event_mpmは1スレッドでうまくさばけるものではなくて、そもそもスレッド依存かつプロセス依存するMPMであるという事ですね。なので、プロセスとスレッド固定で多重度を上げる設定はない、となる気がします。

2012-10-31 13:51:40
藤枝和宏 @kfujieda

@matsumotory マニュアル読み直してみたら、さっきの僕の説明はでたらめでした。すみません。でも、eventもプロセス数とスレッド数のバランスを考えないと性能が出ないのはその通りです。

2012-10-31 14:32:38
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda いえ、こちらこそありがとうございます。今色々試していて、2万同時接続とかしようとするとThreadsPerChildを300Threadの設定周りを1000とかにした場合、SeverLimitとMaxRequestWorkersを数千にする必要がありそうです。

2012-10-31 14:36:39
藤枝和宏 @kfujieda

@matsumotory 2万同時接続ならServerLimit 32, ThreadLimit 256, ThreadsPerChild 256, MaxRequestWrokers 8192くらいでいけませんか?

2012-10-31 14:48:49
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda おおー、いけました。MaxRequestWorkersを多めにしておけば、ServerLimitはこんなので良いのですね。さっきの検証ではMaxRequestWorkersが少なかったです。

2012-10-31 14:52:26
まつもとりー / Ryosuke Matsumoto @matsumotory

@matsumotory @kfujieda どうやらSpareThreadは512以上ぐらいにはしとかないといけないようです。

2012-10-31 14:58:08
藤枝和宏 @kfujieda

@matsumotory 前にブログに書きましたがMaxSpareThreadsは大きいほどいいです。これはworkerについてですがeventでも当てはまると思います。 http://t.co/bdFIuVSE

2012-10-31 15:07:10
まつもとりー / Ryosuke Matsumoto @matsumotory

@kfujieda MaxSpareThreadsが大きい程の良いのは同感です。後は、event特有の値であるAsyncRequestWorkerFactorがどのようにチューニング可能なのかを見ないといけません。

2012-10-31 15:11:09