【Project peko】2ch特化型サーバ・ロケーション構築作戦 Part15

このエントリーをはてなブックマークに追加
589root▲ ★
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>
590root▲ ★:04/11/25 23:23:58 ID:???
きたく。ねむい。

>>589は、明日昼間あたりに入れてみるか。
591留守番 ★:04/11/25 23:29:25 ID:???
これは何がどうなってどうなると予想されるものなんですか?
現状の2ちゃんねるにおいての話しとして、
592root▲ ★:04/11/25 23:38:52 ID:???
>>591
これが、一番まとまっていると思います(原文の翻訳かな)
http://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.pod

つまりうまくいけば、Perl CGIの実行パフォーマンスが数倍になると。
で、こいつはmod_perlよりお手軽で、
mod_perlほど元プログラムをいじらなくても導入できる見込みがあると。

かつ、suexecとも仲が悪くないらしいし、
root権限なくても動かせるというのも、魅力的すね。
593root▲ ★:04/11/25 23:40:32 ID:???
mod_perlにしてもそうですが、
基本路線としては、c系(PHP)を高速化した路線と大同小異です。

つまり、毎回でっかいPerlインタプリタを起動するコストを下げたいと。
594留守番 ★:04/11/25 23:45:11 ID:???
LA を下げるのに寄与するって考えればいいのかな?
処理が比較して短い時間で終るからどんどん捌けるという路線?
595root▲ ★:04/11/25 23:47:15 ID:???
てなわけで、

if 成功
bbs.cgi のすばらしい高速化が実現し、負荷耐性が上がるかもしれない
else
歓迎せざる、予期せぬ結果を招くかもしれない
endif

ということになります。

いろいろ調べていて、それなりに高速化の成功例も報告されているようなので、
まずは実験してみようかなと。
596root▲ ★:04/11/25 23:49:43 ID:???
>>594
そですね。短い時間というか、
1つのbbs.cgi起動・実行をより少ない資源で済むようにすると。

仕込みはしてあるので、
万一「あっちゃー」が起こった時にリブートしていただけるんでしたら、
今やってもいいかなぁ、とか思っていたりして。して。
597動け動けウゴウゴ2ちゃんねる:04/11/25 23:51:44 ID:6+wq7L37
  _  ∩
( ゚∀゚)彡 じっけん!じっけん!
 ⊂彡
598留守番 ★:04/11/25 23:51:48 ID:???
i am ready
599root▲ ★:04/11/25 23:52:40 ID:???
>>598
どもです。
んでは、やってみますね。
600root▲ ★:04/11/25 23:56:52 ID:???
入れた。まずは、

<IfModule mod_speedycgi.c>
MaxRuns 0
</IfModule>

入り。
601root▲ ★:04/11/25 23:57:53 ID:???
#<IfModule mod_speedycgi.c>
#MaxRuns 0
#</IfModule>


をコメントアウトした。
602留守番 ★:04/11/25 23:57:59 ID:???
tiger503 (ex7) ですか?
603root▲ ★:04/11/25 23:59:22 ID:???
ちょっと様子見、、、。
604root▲ ★:04/11/25 23:59:35 ID:???
>>602
そうです。
605root▲ ★:04/11/26 00:00:00 ID:???
ひょっとすると、設定間違ってて、
bbs.cgiの1行目を直さないといけない、、のかも。
606root▲ ★:04/11/26 00:02:46 ID:???
bbs.cgiの1行目を、

#!/usr/local/bin/speedy

に変更した。
607root▲ ★:04/11/26 00:03:48 ID:???
>>606 はだめすね。
/usr/bin/perl に戻しました。
効いてない、、、。のかも。
608留守番 ★:04/11/26 00:04:22 ID:???
どんどん LAが・・・
609root▲ ★:04/11/26 00:04:37 ID:???
うまく効いてないかな?
500 エラーになるすね。>>606
610root▲ ★:04/11/26 00:05:41 ID:???
この状態でしばらく動かしてみるです。

>>608
LAは、この時間のex7だといつもこんなかんじすね。
611root▲ ★:04/11/26 00:06:19 ID:???
つまり、LA=30とか50とかでは、どってことないってころです。< この時間のex7
612留守番 ★:04/11/26 00:08:02 ID:???
>>606 の直後にどんどん上昇し始めて
>>607 の直後から元にもどり始めた

ということです。
613動け動けウゴウゴ2ちゃんねる:04/11/26 00:09:44 ID:+llSYnHe
mod_perl化のための一歩
・exit()をApache::exit()でオーバーライド
614root▲ ★:04/11/26 00:10:08 ID:???
ですね。500エラーの原因をつかむ必要がありそう。
615root▲ ★:04/11/26 00:11:33 ID:???
今Apache起動しなおしました。LAが一時的に上がるです。
616root▲ ★:04/11/26 00:15:20 ID:???
ふむ、やはり500エラーになるですね。

(>>606>>600入りでやってみた)
617root▲ ★:04/11/26 00:17:02 ID:???
[Thu Nov 25 07:14:22 2004] [error] [client 219.197.196.67] Premature end of script headers: bbs.cgi, referer: http://ex7.2ch.net/test/read.cgi/morningcoffee/1101308600/l50

って言うなぁ。< speedyに食わせると
618root▲ ★:04/11/26 00:18:37 ID:???
ちょっと、簡単なスクリプトで試してみるです。
619root▲ ★:04/11/26 00:21:09 ID:???
http://ex7.2ch.net/test/mod_speedycgi/mod_perl_test.cgi

動くみたいだなぁ。
(mod_perl_testとなってますが、speedycgiで実行してます)
620未承諾広告※ ◆TWARamEjuA :04/11/26 00:21:17 ID:76OGEP8i
>>617
use CGI::Carp qw(fatalsToBrowser);

を入れると、エラーの実態が表示されるので参考になるかと。
ただし、その部分のソースコードも表示されるのでゴニョゴニョ
621root▲ ★:04/11/26 00:24:01 ID:???
>>620
うーむ、それわ、、、。
622未承諾広告※ ◆TWARamEjuA :04/11/26 00:26:42 ID:76OGEP8i
>>621
とりあえず、正しいhttpdレスポンスを吐き出していないかと思いますです(苦笑)>ぷりめちゃーなんたら
623動け動けウゴウゴ2ちゃんねる:04/11/26 00:29:44 ID:XVDEKJVQ
#!/usr/bin/speedy -r10000

use strict;

use warnings;

use sigtrap;


...
624root▲ ★:04/11/26 00:32:32 ID:???
<IfModule mod_speedycgi.c>
<IfModule>

で囲んじゃ、だめとわかたです。
囲まなければ、1行目を変えなくてもspeedyで起動する(で、500エラー)。
625root▲ ★:04/11/26 00:37:08 ID:???
MaxRuns 0
ではなくて、
SpeedyMaxRuns 0
だったとわかったです。

ちなみに上記でも500エラー。

あとは、500エラーの原因は何か、と。
626未承諾広告※ ◆TWARamEjuA :04/11/26 00:38:13 ID:76OGEP8i
んぢゃ、cp bbs.cgi ナンタラbbs.cgi で複製を作って、 use CGI::Carp qw(fatalsToBrowser); 入れちゃうとか(^-^;)

でもってそろそろ眠m(_ _)m
627root▲ ★:04/11/26 00:40:49 ID:???
で、さらに、
<IfModule mod_speedycgi.c>
ではなくて、
<IfModule mod_speedycgi2.c>
だとわかった。

あとは、500エラーの原因さえわかれば。
628動け動けウゴウゴ2ちゃんねる:04/11/26 00:43:25 ID:XVDEKJVQ
exit使ったらだめとか
629動け動けウゴウゴ2ちゃんねる:04/11/26 01:03:27 ID:QmFQtdHo
順番にやっていけばいいかと
前提:perlccによる実行形式を削除
1) 1行目を変えるのみ&MaxRunsを1にする(-- -r1)
2) MaxRunsを指定しない
3) mod_speedycgiを使ってみる
630root▲ ★:04/11/26 01:08:35 ID:???
-- -r1 があたりのもより。
631root▲ ★:04/11/26 01:10:42 ID:???
動いたもより。
632root▲ ★:04/11/26 01:12:38 ID:???
今の設定

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配下に。
633root▲ ★:04/11/26 01:13:01 ID:???
みるみるLAがさかってゆく、、、。< ex7
634root▲ ★:04/11/26 01:16:05 ID:???
うそみたいに軽くなった。

これで、しばらくようすをみてみよう。
635root▲ ★:04/11/26 01:25:18 ID:???
でもこれだと、毎回起動はしてる、、、だよなぁ、たぶん。

どのくらい効果があるかは、しばらく観察ということで、

ごはんたべてきます。

从o^ー^从御飯喰
http://ex7.2ch.net/test/read.cgi/morningcoffee/1101210350/
636動け動けウゴウゴ2ちゃんねる:04/11/26 01:26:30 ID:+llSYnHe
たとえ-r1だとしても、バイトコンパイルのキャッシュが効くとか?
637動け動けウゴウゴ2ちゃんねる:04/11/26 01:29:05 ID:760svNOj
>>635
静かに楽しそうでなんかうれしいよ
638動け動けウゴウゴ2ちゃんねる:04/11/26 01:30:58 ID:+llSYnHe
もしかして$ENV{'QUERY_STRING'}でパラメータを渡しているところが初期化ルーチンの最初だけとかじゃ無い?

環境変数を渡すタイミングが初期化時だけだとハマりどころかも。
639動け動けウゴウゴ2ちゃんねる:04/11/26 01:34:09 ID:+llSYnHe
あとexit前に
%Hoge = ();
みたいな感じで消去しとかないと-r1じゃないと動かないスクリプトになるという肝。
640root▲ ★:04/11/26 01:57:00 ID:???
>>638-639
たぶん、備後の予感。
しかしわたしわ、Perlかけないし。
641名無し募集中。。。:04/11/26 02:05:26 ID:QmFQtdHo
よかったよかった
642从o^ー.^从御飯喰:04/11/26 02:07:05 ID:ww4C5adr
>>640
ガンガレー。
643root▲ ★:04/11/26 02:38:22 ID:???
speedy_backendのゴミプロセスが残っていたようなので、それらをkillして、

SpeedyTimeout 60

を追加して、httpdを立ち上げなおした。