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

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

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

●質問者: TOMOSUMA
●カテゴリ:インターネット ウェブ制作
✍キーワード:Apache mod_perl カスタマイズ クリア コントロール
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● kurukuru-neko
●35ポイント

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

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

なります。

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

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

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

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

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

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

違いを判断できる。

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




◎質問者からの返答

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

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

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

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

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


2 ● Kennosuke
●35ポイント

よろしくお願いします。

まず、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/

◎質問者からの返答

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

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

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

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

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

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

関連質問


●質問をもっと探す●



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