Reverse proxy with Apache2's mod_proxy

mod_proxy 経由でバックエンドへのリクエストが時々詰まる現象についてもらったアドバイスのまとめ。
0
hiratara @hiratara

全裸のmod_perlとStarmanだとStarmanが速いのに、Apacheのmod_proxyを経由すると逆転してしまうのは自分の検証方法が悪いのかなあ。もしくは、Apacheのmod_proxyがレスポンスのkeep-aliveやprotocolで速度が変わるのかなあ。

2010-03-25 11:38:46
徳永 広夢 @tokuhirom2

@hiratara mod_perl と mod_proxy を同じプロセス内でうごかしてたりとかはしませんよね?

2010-03-25 11:43:20
hiratara @hiratara

ええ、別です。表がApache2で裏がApacheっていう環境ですので、起動ミスも多分ないはず。 RT: @tokuhirom: @hiratara mod_perl と mod_proxy を同じプロセス内でうごかしてたりとかはしませんよね?

2010-03-25 11:53:07
hiratara @hiratara

--workersの指定を大きくしたら直った! RT: @hiratara 全裸のmod_perlとStarmanだとStarmanが速いのに、Apacheのmod_proxyを経由すると逆転してしまうのは自分の検証方法が悪いのかなあ。

2010-03-25 18:12:00
hiratara @hiratara

mod_proxy+Starmanで--workersの数が少ないと、全てのリクエストが遅いんじゃなくてつまるリクエストが出るみたい。手元のOS Xでこれで検証。 http://gist.github.com/343369

2010-03-25 18:43:14
Tatsuhiko Miyagawa @miyagawa

@hiratara undocumented ですが --backlog を 10 とかすくなくしてみるとどうでしょう?

2010-03-25 18:46:51
hiratara @hiratara

おおっ、現象が起こるまでの回数はかなり伸びました。ただ、やはりそのうち詰まるリクエストが出てくるみたいです。 RT: @miyagawa: @hiratara undocumented ですが --backlog を 10 とかすくなくしてみるとどうでしょう?

2010-03-25 19:09:52
Tatsuhiko Miyagawa @miyagawa

@hiratara also it's really a mod_proxy issue. Use real proxy like nginx :)

2010-03-25 19:12:12
Tatsuhiko Miyagawa @miyagawa

@hiratara あとあえてdocumentしてませんが min_spare_servers 系を設定すればビジーのワーカー数におうじて動的にworkerの数はふやせます。本番系のアプリケーションサーバでこういう設定をつかうのは個人的に好きじゃないのですが

2010-03-25 19:17:14
Tatsuhiko Miyagawa @miyagawa

@hiratara also SetEnv proxy-nokeepalive 1 to turn off keepalives might help

2010-03-25 19:21:58
Tatsuhiko Miyagawa @miyagawa

@hiratara also disablereuse=On http://bit.ly/ba1tJf as well as STARMAN_DEBUG=1. I gave you all hints!

2010-03-25 19:34:33
hiratara @hiratara

@miyagawa うおー、もろもろ助かります!明日にでも検証してみます。引っかかるのは、ワーカー不足でタイムアウト待ちって感じですかね。

2010-03-25 19:35:20
Tatsuhiko Miyagawa @miyagawa

@hiratara @kazuho さんいわく mpm_prefork でmod_proxy使うのがわるい!そうですw

2010-03-25 19:36:06
Kazuho Oku @kazuho

mpm_prefork + mod_proxy + persistent connections = broken by design RT @miyagawa: @hiratara @kazuho さんいわくmpm_preforkでmod_proxy使うのがわるい!そうですw

2010-03-25 19:41:18
hiratara @hiratara

SetEnv proxy-nokeepalive 1 すれば確かに安定はするなあ。当然遅くなるけど。

2010-03-26 14:05:27
hiratara @hiratara

worker の時は MaxClients を ThreadsPerChild で割るのか。MaxSpareThreadsを割ってしまっていた・・・。

2010-03-26 14:37:22
hiratara @hiratara

昨日 @miyagawa さんが怒濤の勢いで教えてくれたことをエントリに書いた。 http://d.hatena.ne.jp/hiratara/20100326/1269595224

2010-03-26 18:28:50
Kazuho Oku @kazuho

blogged 2010年代には Apache の mpm_prefork とか流行らない (もしくは HTTP keep-alive のメリットとデメリット) - kazuhoのメモ置き場 http://bit.ly/9FPbOp

2010-03-27 20:24:06