【Project peko】2ch特化型サーバ・ロケーション構築作戦 Part15
Perl側を変えないとすると、こうかな。
# まだ入れてない。
LoadModule speedycgi_module libexec/apache2/mod_speedycgi.so
# まずは安全のため、機を見てコメントアウトとか数字を増やすとか
<IfModule mod_speedycgi.c>
MaxRuns 0
</IfModule>
# bbs.cgiだけSpeedyCGIにしてみる
<IfModule mod_speedycgi.c>
<Files bbs.cgi>
SetHandler speedycgi-script
</Files>
</IfModule>
きたく。ねむい。
>>589は、明日昼間あたりに入れてみるか。
これは何がどうなってどうなると予想されるものなんですか?
現状の2ちゃんねるにおいての話しとして、
mod_perlにしてもそうですが、
基本路線としては、c系(PHP)を高速化した路線と大同小異です。
つまり、毎回でっかいPerlインタプリタを起動するコストを下げたいと。
LA を下げるのに寄与するって考えればいいのかな?
処理が比較して短い時間で終るからどんどん捌けるという路線?
てなわけで、
if 成功
bbs.cgi のすばらしい高速化が実現し、負荷耐性が上がるかもしれない
else
歓迎せざる、予期せぬ結果を招くかもしれない
endif
ということになります。
いろいろ調べていて、それなりに高速化の成功例も報告されているようなので、
まずは実験してみようかなと。
>>594 そですね。短い時間というか、
1つのbbs.cgi起動・実行をより少ない資源で済むようにすると。
仕込みはしてあるので、
万一「あっちゃー」が起こった時にリブートしていただけるんでしたら、
今やってもいいかなぁ、とか思っていたりして。して。
_ ∩
( ゚∀゚)彡 じっけん!じっけん!
⊂彡
i am ready
入れた。まずは、
<IfModule mod_speedycgi.c>
MaxRuns 0
</IfModule>
入り。
#<IfModule mod_speedycgi.c>
#MaxRuns 0
#</IfModule>
をコメントアウトした。
tiger503 (ex7) ですか?
ちょっと様子見、、、。
ひょっとすると、設定間違ってて、
bbs.cgiの1行目を直さないといけない、、のかも。
bbs.cgiの1行目を、
#!/usr/local/bin/speedy
に変更した。
>>606 はだめすね。
/usr/bin/perl に戻しました。
効いてない、、、。のかも。
どんどん LAが・・・
うまく効いてないかな?
500 エラーになるすね。
>>606
この状態でしばらく動かしてみるです。
>>608 LAは、この時間のex7だといつもこんなかんじすね。
つまり、LA=30とか50とかでは、どってことないってころです。< この時間のex7
mod_perl化のための一歩
・exit()をApache::exit()でオーバーライド
ですね。500エラーの原因をつかむ必要がありそう。
今Apache起動しなおしました。LAが一時的に上がるです。
ちょっと、簡単なスクリプトで試してみるです。
>>617 use CGI::Carp qw(fatalsToBrowser);
を入れると、エラーの実態が表示されるので参考になるかと。
ただし、その部分のソースコードも表示されるのでゴニョゴニョ
>>621 とりあえず、正しいhttpdレスポンスを吐き出していないかと思いますです(苦笑)>ぷりめちゃーなんたら
#!/usr/bin/speedy -r10000
use strict;
use warnings;
use sigtrap;
...
<IfModule mod_speedycgi.c>
<IfModule>
で囲んじゃ、だめとわかたです。
囲まなければ、1行目を変えなくてもspeedyで起動する(で、500エラー)。
MaxRuns 0
ではなくて、
SpeedyMaxRuns 0
だったとわかったです。
ちなみに上記でも500エラー。
あとは、500エラーの原因は何か、と。
んぢゃ、cp bbs.cgi ナンタラbbs.cgi で複製を作って、 use CGI::Carp qw(fatalsToBrowser); 入れちゃうとか(^-^;)
でもってそろそろ眠m(_ _)m
で、さらに、
<IfModule mod_speedycgi.c>
ではなくて、
<IfModule mod_speedycgi2.c>
だとわかった。
あとは、500エラーの原因さえわかれば。
exit使ったらだめとか
順番にやっていけばいいかと
前提:perlccによる実行形式を削除
1) 1行目を変えるのみ&MaxRunsを1にする(-- -r1)
2) MaxRunsを指定しない
3) mod_speedycgiを使ってみる
-- -r1 があたりのもより。
動いたもより。
今の設定
LoadModule speedycgi_module libexec/apache2/mod_speedycgi.so
<IfModule mod_speedycgi2.c>
SpeedyMaxRuns 1
</IfModule>
で、
<IfModule mod_speedycgi2.c>
<Files bbs.cgi>
SetHandler speedycgi-script
</Files>
</IfModule>
に設定。
これで、元bbs.cgiをいじることなく、bbs.cgiだけspeedycgi配下に。
みるみるLAがさかってゆく、、、。< ex7
うそみたいに軽くなった。
これで、しばらくようすをみてみよう。
たとえ-r1だとしても、バイトコンパイルのキャッシュが効くとか?
もしかして$ENV{'QUERY_STRING'}でパラメータを渡しているところが初期化ルーチンの最初だけとかじゃ無い?
環境変数を渡すタイミングが初期化時だけだとハマりどころかも。
あとexit前に
%Hoge = ();
みたいな感じで消去しとかないと-r1じゃないと動かないスクリプトになるという肝。
よかったよかった
speedy_backendのゴミプロセスが残っていたようなので、それらをkillして、
SpeedyTimeout 60
を追加して、httpdを立ち上げなおした。