1 :nobodyさん:2006/06/05(月) 20:01:09 ID:+YcYjDiD
mod_perl
http://perl.apache.org/

SpeedyCGI
http://perldoc.jp/docs/modules/CGI-SpeedyCGI-2.21/SpeedyCGI.pod

前スレ
mod_perlを使おう!
http://pc8.2ch.net/test/read.cgi/php/1005122528/

ー二三ヘ( ゜∀゜)ノ

22 :nobodyさん:2006/06/13(火) 22:00:36 ID:???
> mod_perlをはじめて使った時は感動したが、後で愕然とした。
> しかも太る一方。
> topコマンドを叩いたら、10MB超のアパッチプロセスが10個以上並んでいた。

apache の設定がわからんからといって、mod_perl のせいにしてはいかんよね。

23 :nobodyさん:2006/06/13(火) 22:09:37 ID:???
>>22
めちゃくちゃ言うなあ。
mod_perlをoffにしてapache再起動したら、通常のサイズに戻ったが。

逆にそちらではどれくらいのサイズなんだ?

83 :nobodyさん:2006/06/14(水) 14:58:15 ID:???
原理的には、プロセス間通信のないmod_perlは速度的に優位なはずだが、
どこのベンチをみても有意な差がない。
というより、むしろ負け気味。
たとえ原理通りになっても、現実には無意味な程度だと思う。

115 :nobodyさん:2006/06/15(木) 16:04:49 ID:???
>>83
>原理的には、プロセス間通信のないmod_perlは速度的に優位なはずだが、
>どこのベンチをみても有意な差がない。

プロセス間通信がないことは、応答時間の短縮にはつながっても
スループットにはあんまり影響しないってことじゃない?

116 :nobodyさん:2006/06/15(木) 18:41:07 ID:???
>>115
応答時間の短縮≠スループットの向上。
ちょっと理解に苦しむが、どういう意味?

125 :116:2006/06/15(木) 20:35:31 ID:???
こういう事はあまり言いたくないが、スループットの意味を解って使っているのか?
スループットとは単位時間に処理できる量のことだ。
> mod_perlのほうが応答時間は短くなるかもしれないけど、それはスループットには影響を与えないんだろうね、ちうこと。
この話は、mod_perlはメモリを食うのでセッション数を捌けない。
だから、応答時間は短くても単位時間当たりの処理数はあがらない。

こういう意味なんだろうが、それは単純にベンチには出ない。
まずmod_perlへのリクエスト量が多く、mod_perlの処理に支障がある状態のベンチかどうか。
そうでなければ、何の関係もない。

くだらない話だ。

129 :nobodyさん:2006/06/15(木) 22:35:45 ID:??? ?#
http://daemoninc.com/SpeedyCGI/benchmarks/

130 :nobodyさん:2006/06/16(金) 03:06:13 ID:???
>>125
おいおい、今までの話で、「スループット」を誤用したところがあるか?なんでこんな心配されなきゃならん。
まず、
>ベンチの速度の話をしているときに、いきなりスループットは脱線だよ
を説明してくれ。

>こういう意味なんだろうが、それは単純にベンチには出ない。
>まずmod_perlへのリクエスト量が多く、mod_perlの処理に支障がある状態のベンチかどうか。
>そうでなければ、何の関係もない。
あれー、今はmod_perlのベンチマークの話だよね?mod_perlに負荷がかからないようなベンチを勝手に想像されてもなー。

>どういうベンチがいいとかいう問題じゃない。
>ベンチは取った条件を考慮しないと、意味がない。
じゃあどういうベンチマークテストで、どういう条件を考慮すればいいわけ?
おまえの話きいてると、逃げてるだけじゃん。

134 :nobodyさん:2006/06/16(金) 12:44:16 ID:???
>>130
> あれー、今はmod_perlのベンチマークの話だよね?mod_perlに負荷がかからないようなベンチを勝手に想像されてもなー。

「mod_perlに負荷がかからないような」ではなくて、
mod_perlにどれくらいの負荷がかかっていて、mod_perlがセッションさばけるかが問題ってことじゃねえ?
「mod_perlに負荷がかかって」いても>129のような軽い負荷だと関係ないっていうことかな。

139 :nobodyさん:2006/06/16(金) 21:26:06 ID:???
> beか鳥をつけた方がよくね?

beも鳥もつけずにデマだけ並べるといいということ?

170 :nobodyさん:2006/06/16(金) 23:31:31 ID:???
mod_perl と SpeedyCGI どっちがいいの?

218 :nobodyさん:2006/06/17(土) 04:07:05 ID:???
speedyCGI試してみたけど、確かに速いね。

最初、dagのrpmを入れてみたけど、mod_speedycgiが入っていないのでsourceから起こしてみた。
手始めにhello worldを表示するだけのスクリプトで試すと、通常のCGIと、CGI版speedyCGIは
大差が無かったが、mod_speedycgiだと5倍程度のスピードが出た。
次に、上記hello worldにuse CGI; use DBI を付けてみたら、CGI版speedyCGIは、10??20倍程度、
mod_s;peedycgiだと、100??150倍程度のスピードになった。

ちなみに、PHP5.0.4でhello worldを出力すると、mod_speedycgiより、2割位遅い感じ。
PEAR DBをrequireすると、use CGI; use DBIしたCGI版speedyCGIと同程度のスピード。

普通のCGIや、PHP使うのが馬鹿らしくなってきた。

221 :nobodyさん:2006/06/17(土) 09:49:36 ID:???
>>218
> 通常のCGIと、CGI版speedyCGIは大差が無かった

CGI版SpeedyCGIで鯖運用してるが、通常のCGIから劇的に速くなったよ。
どこもそういうことになってるみたいだが。
CGI版SpeedyCGIは1発目の動作は
インタープリタ起動→常駐→コンパイル→キャッシュ→実行
となるから、遅い。
次回からは
最初の4ステップがなくなり実行のみになるので、急激に速度が向上する。

2回以上実行した?

225 :221:2006/06/17(土) 11:29:26 ID:???
ソースは
http://rintaro.dip.jp/program/nicky/index.html
ここを参考に作ったSpeedyCGI版nicky.cgi

ベンチ
ab -n 100 -c 10

     CGI   SpeedyCGI mod_speedycgi mod_perl
1回目  0.54    6.12    74.24    6.93
2回目  0.54    6.38    74.24    7.16
3回目  0.54    6.41    72.25    7.09
4回目  0.53    6.41    73.86    7.15
5回目  0.54    6.45    74.46    7.19

平均   0.538   6.354    73.81    7.104

あり得ない...
速い...

アパッチモジュール版SpeedyCGI最強。
>218は発見者
誰もmod_speedycgiは無視してたからな。

232 :225:2006/06/17(土) 13:40:36 ID:???
追試結果。
ぬかよろこびさせてすまそ。

>225の異常な高スコアはただのファイルとしてアクセスされていたためです。

修正後のベンチです。

      CGI  SpeedyCGI  mod_speedycgi mod_perl
1回目   0.45    5.89    7.36    6.35
2回目   0.45    6.06    7.36    6.34
3回目   0.44    6.05    7.37    6.38
4回目   0.45    6.03    7.18    6.4
5回目   0.44    5.92    7.39    6.12

平均    0.446   5.99    7.332    6.318
(Requests per second)

お騒がせして申し訳ない。

243 :225:2006/06/17(土) 15:40:36 ID:???
まあ、時間ができた時にやってもいいな。
今日はもう時間がない。
無期限でというならやってもいいよ。

245 :nobodyさん:2006/06/17(土) 16:49:21 ID:uEg75/Hh
いろいろ参考になります。ありがトン。
ところで、perlccでperlスクリプトをバイナリにしとくのって
cgiが速くなるのでしょうか。やってみればいいんでしょうけど。

257 :nobodyさん:2006/06/21(水) 07:25:59 ID:vwMWqBxm ?#
perlccってあんまりはやらんですよね。


264 :nobodyさん:2006/06/23(金) 02:29:54 ID:ybv8oJFI
漏れが>>245で、2006/06/17(土) 16:49:21にperlccのこと
質問したのに、無視しといて、>>257が質問したら、急に
レスが付くって、本当にありがとう。

267 :243:2006/06/23(金) 12:38:21 ID:???
>>264
今度、ベンチとるときにperlccもやるつもりだったよ。(-Bオプションのみ)
レスはしなかったが。

274 :267:2006/06/25(日) 22:58:06 ID:???
workerのベンチをある程度とれたので公開。

測定環境
K6-2 475MHz
SDRAM 512MB
Vine3.2最小構成+α
Apache2.0.58、mod_perl、SpeedyCGIはソースからコンパイル。
httpd.conf、コマンドラインスイッチはデフォルトのまま使用(Alias等のみhttpd.confに追加)。

mod_speedycgiはworkerで動かない模様(エラーログにスレッド下で動かしたとでる)なのでとっていない。

ノーマルCGIとperlcc -Bは一度クラッシュすると数分間CPU全開になるため、1回目で×の場合2回目以降はとっていない。
mod_perl、SpeedyCGIはクラッシュ後すぐに回復するのでその後も継続。
mod_perl、SpeedyCGIは1回目に必ず初期化が起こる条件で測定。
(mod_perlはApache再起動、SpeedyCGIはソースをtouch)
(これはリソースの解放の意図も含む)

以下、結果レポート。

287 :nobodyさん:2006/06/26(月) 20:13:13 ID:???
-n 20 -c 200って変じゃない?
200並列全体で20回のリクエストでしょ?
更に-c 20以上はmod_perlとかだとワーカを再利用しない初期化速度を計測しているような気がする。

288 :267:2006/06/26(月) 20:30:46 ID:???
> -n 20 -c 200って変じゃない?
http.confはいじってないのでMaxClients150のままです。
MaxClients150でc 200のときにどうなるのか興味があったので、あえて200を試しました。

> 更に-c 20以上はmod_perlとかだとワーカを再利用しない初期化速度を計測しているような気がする。
すいませんが、よく意味がわかりません。
新しくプロセスを起こしてしまっているという意味でしょうか?

私はデータを提供しただけなので、問題があれば自分で反論を証明するデータを提出してください。
少なくとも「気がする」というような反論は勘弁してもらいたいです。



290 :nobodyさん:2006/06/26(月) 22:49:50 ID:???
>>288
>>287 が言っている事は、
-n 20 -c 200 だと、200回の同時接続要求を出すのに、全体のリクエスト数が
それ以下の20回と言うのはおかしい。nの値は、cより大きい筈ではないか、
ではないかと思います。

もし、同時接続200を20回繰り返すという意図なら、-n 4000 -c 20 という感じか
なと。(abが、リクエスト完了の後、すぐに次のリクエストを発行すれば、-n 4000
が、この意図を満たすのに適当な値ではないのですが)

ちなみに、n < c の場合、少なくとも、c回のリクエストは発行する様です。


310 :274:2006/06/29(木) 02:24:13 ID:???
>287氏、>290氏からパラメータの不備を指摘されたので、再測定。
K6-2 475MHz
512MB
Vine3.2最小インストール+コンパイル環境+Apache2.0.58ソース(workerでコンパイル)+mod_perlソース+SpeedyCGIソース+FastCGIソース

今回のパラメータでの結果は、cが大きい時のレスポンスの落ち込みが少ないが、前回のパラメータと併せて再現性確認。
またPerlRunのスコアがCGIより悪いという?な点もあるが、これも再現性確認しているので公開。
perlcc -Bが2回目にクラッシュするパターンは1回目終了時にCPU全開が続いていることを確認。

以下、結果報告。

333 :nobodyさん:2006/06/29(木) 15:15:19 ID:??? ?#
use CGI::Fastとかを加えないと動きもしないの?

355 :310:2006/06/30(金) 23:06:24 ID:???
K6-2 475MHz
512MB
Vine3.2最小インストール+コンパイル環境
+Apache2.0.58ソース(preforkでコンパイル)+mod_perl-2.0.2ソース+PersistentPerl-2.22ソース+fcgi-2.4.0ソース+mod_fastcgi-2.4.2ソース
テストソースnicky.cgi改(約160KB)

1パラメータセット終わる度に、
SpeedyCGI、mod_speedycgiはテストソースをtouch、
fastcgi、Registry、PerlRunはhttpdを再起動してキャッシュをリセット。

Registryは-c 40以降、PerlRunは-c 100以降でswapが発生したため、1パラメータ終わる度にPCを再起動。

以下、結果報告。

367 :355:2006/07/01(土) 12:03:41 ID:???
ソース

hello.html
<HTML>
Hello, world!
</HTML>

hello.pl
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "Hello, world!\n";
print "</HTML>";

hello.c
#include <stdio.h>
void main(void)
{
printf("Content-type: text/html\n\n");
printf("<HTML>\n");
printf("Hello, world!\n");
printf("</HTML>");
}

402 :nobodyさん:2006/07/02(日) 03:23:34 ID:???
最後にlighttpd+FastCGI

K6-2 475MHz
512MB
Vine3.2最小インストール+コンパイル環境
+lighttpd-1.4.11ソース+fcgi-2.4.0ソース

テストソース hello world(>367-368)
fast_hello.pl、nicky.cgi改はFastCGIソース
hello.html、nicky.htmlは同等のhtml

以下、結果報告。


429 :nobodyさん:2006/07/02(日) 22:20:09 ID:???
K6-2 475MHz
512MB
Vine3.2最小インストール+コンパイル環境
+lighttpd-1.4.11ソース+fcgi-2.4.0ソース

テストソース
S hello world(>367-368)
L nicky.cgi改

以下、結果報告。

472 :nobodyさん:2006/07/08(土) 16:05:57 ID:???
このスレを見て、MovableTypeでspeedyCGIを使いたいと思って
apache1.3の環境でspeedyCGIを入れ、mt.cgiの先頭を書き換えて実行してみました。

1回目は無事表示されるんですが、リロードするとInternalServerErrorが。
何かインストールで失敗してるんでしょうか…?

473 :nobodyさん:2006/07/08(土) 16:45:31 ID:???
ここはそういうスレではないです

474 :nobodyさん:2006/07/08(土) 18:54:22 ID:uy7Z+OsL ?#
>>472
mtの前に、hello.cgiとか動かしてみればいいんでないすか。

476 :472:2006/07/08(土) 19:20:32 ID:???
>>473
質問スレではないかもしれないとは思ったのですが、
皆さんはかなりお詳しいと思い、悩んだのですが思い切って質問させていただきました。
気分を害しましたら、ごめんなさい。

>>474
レスありがとうございます。
「hello.cgi」というのは、要するにテスト用のcgiを作成して、ということでよろしいですか?
googleなどでヒットするhello.cgiを試しに作ってみて、先頭部分を# !/usr/bin/speedyと
書き換えてみましたところ、無事リロードしても表示されました。
となると、問題はmt.cgiなのでしょうか…?

googleでいろいろ調べまくったのですが、どうも有益な情報が見つかりません。
movabletypeでspeedyCGIを動かしている方々、どうぞお知恵を拝借ください…。

477 :nobodyさん:2006/07/08(土) 19:56:46 ID:???
>>476
>1回目は無事表示されるんですが、リロードするとInternalServerErrorが。

グローバル変数の初期化ができてない典型のように思えますが、
そのmtはmod_perlやFastCGIでは正常に動き、SpeedyCGIのみ動かない状態でしょうか?

mtは触ったことがないですが、mod_perlかどうか判定してコードを切り替えているという事は聞いた事があります。
≠mod_perlの判定のためCGI用のコードが実行されている?

後、mtはSpeedyCGIよりFastCGIの方が情報が多いので楽かも。
http://as-is.net/blog/archives/001042.html
ここが有名。

499 :nobodyさん:2006/07/19(水) 15:16:27 ID:???
mod-perlでSSIを使いたく、Apache::SSIをインストしたいんですが、
依存でApache::Constantsがないと言われます。

それで、cpanでApache::Constantsをインストしようとすると、

************* WARNING *************

Your Perl is configured to link against libgdbm,
but libgdbm.so was not found.
You could just symlink it to /usr/lib/libgdbm.so.2.0.0


************* WARNING *************
Enter `q' to stop search
Please tell me where I can find your apache src
[../apache_x.x/src]


と警告が二つ出てしまいます。/apache/src なんてどこにもないんだけど、これはなんでしょか?(-o-;



501 :nobodyさん:2006/07/19(水) 22:46:09 ID:???
全くスレ違いだと思うが、

> ************* WARNING *************
> 
> Your Perl is configured to link against libgdbm,
> but libgdbm.so was not found.
> You could just symlink it to /usr/lib/libgdbm.so.2.0.0

Perlがgdbm前提でビルドされているのに、gdbmの実体がみつからない。
/usr/lib/libgdbm.so.2.0.0に実体へのシンボリックリンクを作れ。

> ************* WARNING *************
> Enter `q' to stop search
> Please tell me where I can find your apache src
> [../apache_x.x/src]
qを入力した後アパッチソースのパスを入力しろ。

以上で間違いないと思うが。

537 :gan:2006/08/19(土) 06:24:16 ID:jPBCnjia
すれ違い課も知れませんが、SpeedyCGIについて教えていただけたら、、。
【環境概要】perl5.8.3、apache、Linux
【状態】speedyCGIのモジュールをCPANのコマンドラインからインストール済み
【使用可能か?】一回目のスクリプト実行は成功、しかし2度目の実行では
エラーになります。スクリプト常駐の寿命を5秒に設定しといて、一回スクリ
プトを実行させると成功、続けて5秒以内に他のページをアクセスすると
エラーとなりますが、5秒以上待てば(スクリプトが死ぬまで待って、新規に
スクリプトを読み込ませれば)成功します。あきらかにメモリ上に
存在するスクリプトを2回目以降呼び出すとエラー、という状況です。
【他にもモジュールを使用しているか?】
Net::amazonのモジュールを使用しており、エラーになる場合はこの
モジュールを利用して searach -> (asin => "xxxxxxxxx")とやると
以下のようなエラーが吐かれます(1度目は正常、2度目からエラー)
【エラーログ】
Premature end of script headers: mr.cgi, referer: http://airrack.jp/
Undefined subroutine &main:: called at /usr/lib/perl5/site_perl/5.8.3/Log/Log4perl.pm line 133.,
referer: http://hogehoge.jp/hoge
【エラーログに出てくるLog4perlについて】
Log4perl.pmというモジュールは、おそらくNet::Amazonがログをはくために
使っていると思われますが、詳細はよく分かりません。どちらのモジュールも最新
に上げています。
Log4perlモジュール内で変なキャッシュが残っているのでしょうか?
その場合モジュールをいじって直すしかないのでしょうか・・・。
googleで1日中検索しましたが情報がありませんでした。
かなり嵌ってしまいました。speedyCGIでNet::Amazon使ってらっしゃる方
で同様の状態になっている方いませんか?よろしければ情報いただけたら。。

よろしくお願いいたします。

539 :nobodyさん:2006/08/19(土) 13:45:18 ID:???
>>537
本人もわかってるようですが、グローバル変数の問題なのは間違いないでしょ。
まず基本的な事から確認。

メインのスクリプトにはグローバル変数の初期化処理がある?

540 :gan:2006/08/19(土) 18:55:37 ID:jPBCnjia
>>539
レスありがとうございます。
>メインのスクリプトにはグローバル変数の初期化処理がある?
グローバル変数の初期化処理があるというのは
メインのスクリプトにてmy $hogeとすることで初期化を行っています。
もしかしてmy $hoge=''とする必要があるのでしょうか?


541 :nobodyさん:2006/08/19(土) 19:18:24 ID:???
>>540
my $hoge;
では初期化されないです。
(通常のCGIならOK)

> もしかしてmy $hoge=''とする必要があるのでしょうか?
そうです。

542 :nobodyさん:2006/08/19(土) 22:02:30 ID:???
mod_perlだと
my $hoge;
でいいはずだけどSpeedyCGIだと違うの?
undefと空文字では意味合いが全く違うと思うんだけど。

543 :541:2006/08/20(日) 01:05:51 ID:???
>>540
>>542
漏れの間違い。
our $hoge;は×
my $hoge;は○

732 :nobodyさん:2008/02/22(金) 07:02:49 ID:???
mod_perlなんすけど、sudoで動かないのはなぜに?

ちゃんとApache権限で呼び出してるんだけど、CGIとして動いてる。
他のも一緒?

733 :732:2008/02/24(日) 01:02:41 ID:9eLfTMt1
うう;;
誰か教えておくれ。

あと、mod_perlって標準出力も違う?
Image::Magickで標準出力しようとして、
$image->Write('jpeg:-');
の部分でエラー。ファイル場所がおかしいって。

指定方法を変えれば標準出力できる?

736 :nobodyさん:2008/02/24(日) 16:59:49 ID:???
>>733
mod_perlだとforkするわけじゃなくevalされるからsudoの入り込む余地は無いんじゃないか。

>ファイル場所がおかしいって。
標準出力はSTDOUTで同じ。カレントディレクトリがルートになってるよ多分。
print `pwd`;とかで調べて絶対パスで指定するか始めにchdir。


http://hibari.2ch.net/test/read.cgi/php/1149505269/l50人気ブログランキングへ