mod_perlでメモリに常駐したものをapacheの再起動以外で任意に全てクリアする方法を教えて下さい。或いは、常駐する寿命をコントロールする方法でも良いです。


ブラウザで設定した内容からソースをカスタマイズして再生成する仕組みを作ったのですが、完全に反映されるタイミングが確定できなくて困っています。
ソースを生成する度に名前を変えるしかないのかなとか考えていますが、メモリをクリアする方法があればそっちのおうが良いのにと思って投稿しました。

回答の条件
  • 1人3回まで
  • 登録:2007/03/13 14:02:46
  • 終了:2007/03/20 14:05:03

回答(2件)

id:kurukuru-neko No.1

kurukuru-neko回答回数1844ベストアンサー獲得回数1552007/03/13 16:54:43

ポイント35pt

プロセス単位になりますが

スレッドを使っている場合巻き添えに

なります。

1.各Perlプロセスでexitで終了させる

  専用のソースを作り呼び出す処理を

  呼び出す

  ab

  http://www.atmarkit.co.jp/flinux/rensai/apache15/apache15b.html

2.キャシュされる事を逆に利用する

  グローバル変数にシステムの更新状態

  を記録させる処理を行う。

  キャシュされている状態が古い

  場合は、終了時exitで終了する。

----------------------------------

Apache::exit(),CORE::exit

http://multix.jp/cgi-bin/cdiary2/2003-04-04.dml.html

モジュールのリリースアップをした場合

バージョンチエック用のプログラムを

呼出し呼び出されたプロセスグローバル変数

に現在のバージョンが保存されていると

するとその値と最新の値を比較して

違いを判断できる。

違いがある場合は終了させる。




id:TOMOSUMA

ありがとうございます。ご解答いただいて感激です。

グローバル変数にバージョンを持たせるという発想は思いつきませんでした。なるほどです。

今回の件に限って言えば、ブラウザーからカスタマイズする意図が「プログラム知識の無い人にもカスタマイズできるようにする」ということだったので、バージョン違いで終了するときの見せ方を考えればなんとかなるかもです。

というか、私の都合について何も説明してなかったので、申し訳ありません。

大変参考になりました。ありがとうございます。

2007/03/14 15:49:37
id:Kennosuke No.2

Kennosuke回答回数6ベストアンサー獲得回数02007/03/13 19:04:51

ポイント35pt

よろしくお願いします。

まず、mod_perlでは、Apacheプロセスの中にPerlのメモリ空間が含まれているため、Apacheを切り離してメモリをリフレッシュすることはできないと思います。

その上で、以下のとおり回答いたします。


■課題となっている現象を整理させてください。

ブラウザで設定した内容からソースをカスタマイズして再生成する仕組みを作った

上記の「ソース」とはmod_perlのソース(HTMLソースではない)である認識でよろしいでしょうか。


■困っていることは以下の認識でよろしいでしょうか。

「mod_perlのソース(.pl)を自動生成する仕組みを作成したが、Webブラウザで.plを閲覧した際、タイミングによっては最新の.plではなく、古い.plの出力結果が表示される」

これが問題であれば、.pl実行時にモジュールを再読み込みするよう変更すれば回避できると思います。


■(本題に戻り)常駐する寿命をコントロールする方法

Apacheのバージョンはいくつでしょうか。

1.3系なら、Apacheの設定ファイルで「MaxRequestsPerChild」を指定することでプロセスの寿命をコントロールできます。

例えば、"1" を指定すると1つのリクエストを処理するたびに子プロセスが終了します。


■Apacheの再起動

ご存知かもしれませんが、Apacheを再起動する際に「apachectl -k graceful」などとすれば、現在処理をしている子プロセス・スレッドは処理を続行し、処理終了後に再起動します。

以上です。

http://www.hatena.ne.jp/

id:TOMOSUMA

ありがとうございます。つたない文章を的確にご理解していただいて恐縮です。ご解答をいただけるだけでも感謝ですのに、本当にすみません。

メモリのクリアって出来ないんですね。私が知らないだけなのか出来ないのか、無いことを調べるのが自信が無かったので大助かりです。

あと、寿命の方も時限指定は出来なくてところてん式なんですね。これだけ分かっただけでも収穫です。

ライブラリの読み込みは私も試したのですが、どうもうまくいかなくて、何かへましてるかもですので勉強しなおします。

MaxRequestsPerChild等を少なくするのは1人専用サーバを使うときにやってみます。

とても参考になりました。ありがとうございます。

2007/03/14 15:50:32
  • id:b-wind
    mod_perl にこだわりが無ければ、SpeedyCGI や FastCGI を検討してみてもいいんじゃないかな。
  • id:TOMOSUMA
    ありがとうございます。
    そーなんですよねー、いろいろ手はあると思います。

    ところで、今のところ Apache::Reload というものを使っています。
    http://perl.apache.org/docs/2.0/api/Apache2/Reload.html
    なにとなくこれで良いように思ったのですが、まだ100%は分からずに使っている状態です。(^-^;ど、どうなんでしょう。

この質問への反応(ブックマークコメント)

トラックバック

  • FreeStyleWikiをWinXP/XAMPP環境に構築 FreeStyleWikiをWindowsXP/xampp環境に導入したり。 若干、問題発生したので、サポート掲示板へ投稿。 初めて投稿するので、どこに投稿するか、既知の問題かなど
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません