人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PerlをwindowsXP(home)上でapahce2.2を搭載して使用しています。

その際に、外部ネットワークからのアクセスはなし、自分のPCでApacheを常駐させて
Perlプログラムを走らせるのみ、(外部サイトにアクセスするLWPモジュール等は使う)で、
最高のCGIスピードを出せる状態の設定例(httpd.conf)を教えてください。

環境は、
Windows XP SP2(Home)
Perl ver 5.8.8
LWP Version: 5.805
です。



●質問者: zachouR
●カテゴリ:コンピュータ インターネット
✍キーワード:Apache CGI HOME httpd pc
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● ootatmt
●35ポイント

http://q.hatena.ne.jp/1176779133

こちらとの関連であれば、Apacheの設定はほとんど影響しませんよ。

外部サイトの応答待ちがほとんどでしょうから、perlプログラムのアルゴリズムで解決するしかないと思います(外部サイトへのアクセス順序とかアクセス間隔とか)。

◎質問者からの返答

はい、そちらとの関連です。

そうですか、ほとんど影響なしですか、、、。

どうしても、止まってしまうんですよね、、、。


2 ● wm5775
●35ポイント

う?ん。mod_perlを使ったら?と回答したものです。

#大変恐縮ですが、質問ずばりの回答ではないです。

まず、やりたいことを再確認したいのですが、

ということでしょうか?

それとも、

ということでしょうか?

もしくは、

ということでしょうか?

個人的に使用したいということであれば、やりたいことは、いわゆるスパイダーとかスクレイパーというプログラムを動作させたいということなんですかね?

#要するに、各サイトにあるデータをガサッと集めてきて、加工したものを表示したいということ。

その場合は、apacheは全く関係がないので、perlプログラムを単独で走らせた結果を静的なhtmlファイルとして吐き出し、ローカルでブラウザを使って閲覧すれば済むことだと思います。

最初の質問で、良く意味がわからなかったのですが、このCGIなりPerlが重いと感じるのは、相手のサーバのレスポンスをずっと待っているからじゃないでしょうか?

#つまり、マシンのパフォーマンスの問題ではないということです。

これをCGIとしてWebサーバに乗せたいという理由が、最終目標が外部に公開したいということになると話が別で、サーバーからのレスポンスが帰ってくるまでプロセスがずーと待っている状態で、アクセス数が増えると、サーバーからのレスポンス待ちプロセスが増加するので、当然サーバの負荷は大きくなります。

それを防ぐには、スレッドにしてサーバーにリクエストしてからレスポンスが帰ってくるまで、スレッドがスリープするようにしておけば、バンバンサーバーへのリクエストを発行しても、レスポンスが帰ってくるまでスレッドはスリープするので、ほかのプロセスを処理することができます。

特にCGIでmod_perlを使っていない場合には、cgiがコールされる度にperlインタプリタが起動し、スクリプトの解釈を行い、実行するので、非常に負担が大きくなります。

http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl.html

によると、少なくともmod_perlを使うと、

・cgiが呼ばれる度にperlのインタプリタが起動しない。

→少なくとも最初に呼ばれたときのみ起動する。

・スクリプトがコンパイルされて、キャッシュされるのでスクリプトの解釈をするコストが省ける。

というメリットがあるわけですが、スレッド対応になるわけではありません。

Perlでマルチスレッドを使うには、

こんな感じに書き直すのがいいのではないでしょうか?

http://www.hyuki.com/dig/perlthread.html

#質問に対する直接の回答でなくてすみません。

◎質問者からの返答

これは個人で使用する目的で開発しているソフトだから外部からのアクセスがない。

が現在おかれている状況です。

マルチスレッド、、、難しそうですね。

質問の文章がたらずにすいませんでした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ