
Yappoの本番環境って凄く手抜きしてて、一つのhttpd.confにstaticとmod_perlとcgiとphpな環境がごちゃ混ぜになってるんですよね。
問題ないように見えるようで実はmod_perlなアプリってメモリ食いまくりだから(数十MB)、性的なコンテンツを沢山のhttpdプロセスで処理するって事が出来ないのね。
まぁそんなケースは滅多にないけど。
mod_perlは8個くらい上がってれば十分で、その分メモリに余裕を作って他の事やろうとすると、静的なコンテンツの為のhttpdが足りなくなる。
みたいなジレンマがあって、いいかげんapacheの分離作業をやりました。
分離された物にフロントのapacheがprxoyする感じで。
昔のhttpdな構成をまとめると
一番上のapacheは30Mくらい物理メモリを使ってます。
+---------------------------------------------+
| apache1.3(static/mod_php/mod_perl/mod_proxy)|
+---------------------------------------------+
|
+---------------+
| |
+---------------+ +-------+
| apache2.0(SVN)| | tracd |
+---------------+ +-------+#あとも一個別に開発環境
これでmod_perlが分離され、上のapacheの物理メモリ使用量が10Mくらいに落ちました。
+------------------------------------+
| apache1.3(static/mod_php/mod_proxy)|
+------------------------------------+
|
+-------------------------------------+
| | |
+--------------------+ +---------------+ +-------+
| apache1.3(mod_perl)| | apache2.0(SVN)| | tracd |
+--------------------+ +---------------+ +-------+#あとも一個別に開発環境
ここまで来たら、まだ何かしたくなるのが人の子ってことでphpとcgiも別プロセスに飛ばしたくなりました。
--target=modphpで分離です。
さらに物理メモリ使用量が減り3Mくらいになりました。
+----------------------------+
| apache1.3(static/mod_proxy)|
+----------------------------+
|
+----------------------------------------------------------------+
| | | |
+--------------------+ +-----------------------+ +---------------+ +-------+
| apache1.3(mod_perl)| | apache1.3(mod_php/cgi)| | apache2.0(SVN)| | tracd |
+--------------------+ +-----------------------+ +---------------+ +-------+#あとも一個別に開発環境
フロントがmod_perlとかmod_phpに依存しなくなっちゃったのでapache2.2.3を入れる事にしました。preforkです。
これで今っぽい構成になってきました。
phpとかcgiは
+----------------------------+
| apache2.2(static/mod_proxy)|
+----------------------------+
|
+----------------------------------------------------------------+
| | | |
+--------------------+ +-----------------------+ +---------------+ +-------+
| apache1.3(mod_perl)| | apache1.3(mod_php/cgi)| | apache2.0(SVN)| | tracd |
+--------------------+ +-----------------------+ +---------------+ +-------+#あとも一個別に開発環境
RewriteRule ^(.*\.(cgi|php3?))$ http://example.com:81$1 [P]みたいな感じでforwardしてます。
RewriteRule ^/nph-ss(.*)$ /nph-ss$1 [PT]みたいなことしてます。
とりあえず、こんな感じで再構築してちょっとは軽くなった気がしてます。
今後は画像のクライアントキャッシュとか設定をつめてみようかなぁと思います。
圧縮系はやらないです、トラフィックより負荷対策優先で。
mod_phpまでやったのは、折角だからとことんフロントのメモリ使用量さげちゃおうって事と、あんまりphpの為にプロセス上げとくのも無駄だからなぁって感じからでした。
そういえば
ProxyPassReverse / balancer://みたいな設定書いてるblogを良く見かけますが、それ動かないよ。
ProxyPassReverse / http://ap1な感じで書こうね。 Posted by Yappo at 2006年09月07日 20:56 | TrackBack | tech
ProxyPassReverse / http://ap2
ProxyPassReverse / http://ap3
通りすがりですが、誤字を見つけたので、一言。
「性的なコンテンツを沢山のhttpdプロセスで処理する」
↑「静的」ですよね??