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

mod_perlの挙動について教えてください。

次のようなソースを書いて、実際に何度かアクセスしてみました。

#!/usr/bin/perl

print "Content-type: text/plain\n\n";
print $i++;

ローカル環境ということあり、アクセスしているのは確実にわたしだけです。ですのでアクセスするたびに1、2、3、4、5、6、7...と増えていくことを期待していました。

が、ときどきリセットされたり(0に戻る)、複数のカウントがされたりしました。Perlのファイル自体は編集などはまったく行っていないのですが、これは正しい動作なのでしょうか?


環境は以下になります。
Apache/1.3.33 (Unix) (Vine/Linux)
mod_perl/1.29

●質問者: katsube
●カテゴリ:インターネット ウェブ制作
✍キーワード:Apache Linux mod_perl Perl print
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● まきのっぴ
●69ポイント ベストアンサー

変数の値が保持されるのは同一の Apache プロセスの中での話ですから、プールされた複数のプロセスの中からランダムに割り当てられる環境下としては正しい挙動だと思います。

MaxClientsMinSpareServersMaxSpareServers の設定値を増減してみるとまた挙動が異なってくるはずです。

◎質問者からの返答

合点が行きました。

・キャッシュされた一つが使いまわされるのではなく、プロセスごとにプールされる。

・そのプロセス自体がランダムに切り替わるため上記のような現象が起こる。

というわけですね。

設定値も後ほど試してみようと思います。

ありがとうございました!


2 ● yo-kun
●1ポイント

HTTPサーバの設定によりますが、まず期待通りの動作はしないでしょう。

期待通りの動作をさせるには変数$iの値をファイルなどに保存しておく必要があります。


URLはダミーです。

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

◎質問者からの返答

この質問の主題は解決方法の模索ではなく、“なぜ”期待通りの動作をしないかにあります。

通常のCGIではなく、mod_perl環境下では前回の変数の値が保持されるため初期化が必要とされていますが、であれば“なぜ”上記のような現象が起こるのか、その理由についての質問となります。

関連質問


●質問をもっと探す●



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