次のようなソースを書いて、実際に何度かアクセスしてみました。
#!/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
変数の値が保持されるのは同一の Apache プロセスの中での話ですから、プールされた複数のプロセスの中からランダムに割り当てられる環境下としては正しい挙動だと思います。
MaxClients や MinSpareServers、MaxSpareServers の設定値を増減してみるとまた挙動が異なってくるはずです。
変数の値が保持されるのは同一の Apache プロセスの中での話ですから、プールされた複数のプロセスの中からランダムに割り当てられる環境下としては正しい挙動だと思います。
MaxClients や MinSpareServers、MaxSpareServers の設定値を増減してみるとまた挙動が異なってくるはずです。
合点が行きました。
・キャッシュされた一つが使いまわされるのではなく、プロセスごとにプールされる。
・そのプロセス自体がランダムに切り替わるため上記のような現象が起こる。
というわけですね。
設定値も後ほど試してみようと思います。
ありがとうございました!
HTTPサーバの設定によりますが、まず期待通りの動作はしないでしょう。
期待通りの動作をさせるには変数$iの値をファイルなどに保存しておく必要があります。
URLはダミーです。
この質問の主題は解決方法の模索ではなく、“なぜ”期待通りの動作をしないかにあります。
通常のCGIではなく、mod_perl環境下では前回の変数の値が保持されるため初期化が必要とされていますが、であれば“なぜ”上記のような現象が起こるのか、その理由についての質問となります。
合点が行きました。
・キャッシュされた一つが使いまわされるのではなく、プロセスごとにプールされる。
・そのプロセス自体がランダムに切り替わるため上記のような現象が起こる。
というわけですね。
設定値も後ほど試してみようと思います。
ありがとうございました!