

こんにちは。
現在、セッションとGCに付いての検証を行っています。
セッションを1時間に1200本3秒毎に、WSHを利用して
セッションを張っています。サーバー側で、セッションの
開始と、終了のところでPEARのTimerを使用して、マイクロタイム
を取得しています。ですが、GCは、スクリプトの実行最中に
行われているとは思えません。かといって、クーロンで
動いているわけでもなさそうなので、スクリプトの実行終了時
にGCの処理が走ると思われます。となると、マイクロタイムの
diffというものは、セッションを純粋に張った時間しか求められません。
GCのトラフィックを図るためにいい手段とはないものでしょうか?
因みに環境は、php4.3,linuxです。
宜しくお願い致します
No.3ベストアンサー
- 回答日時:
>上記のようなケースの場合で、session.gc_probabilityを100%にすると、
>G.Cが行われるのは、スタートしてから、30分後になって、G.C対象は始めの10分に張った
>セッションと言うことになりますよね?
100%だと実際は毎回、gcがcallされますが、セッションファイルの修正時刻と比較して削除されず、見かけ上は変化無しと言うことです。
ソースを追う限り、削除が遅れるケースはあっても早まるケースを想定できません。
(ext/session/mod_files.c:ps_files_cleanup_dir())
お役にたてず申し訳ない。
この回答への補足
>100%だと実際は毎回、gcがcallされますが、セッションファイルの修正時刻
>と比較して削除されず、見かけ上は変化無しと言うことです
おっしゃるとおりです。言葉足らずで変な誤解を与えてしまいました。
>ソースを追う限り、削除が遅れるケースはあっても早まるケースを想定できません。
そうですか・・・・
ちょっと、テスト方法を再度見直してみます。
いろいろ有難うございました。
No.2
- 回答日時:
GCは何時開始されるかは、
ソースを読めばわかります。
該当する部分は、
php-4.x.x/ext/session/session.c
の中の、
php_sesion_start()関数です。
なお、ドキュメントに記載があるかと言うと
十分ではありませんが、GCの発生率を決定付ける
パラメータとしての記載ならあります。
php.iniのディレクティブ一覧が該当します。
この回答への補足
有難うございます。
ソースコードを読んでみました。
また、マンモス本にもセッションが開始されたときにガーベッジコレクション(以下G.C)が
開始されてその確率はsession.gc_probabilityが決めるとかいてありました。
有難うございます。
ついでに、もうひとつ聞いていいですか?
・セッションのライフタイムを30分
・セッションを2秒に一回発生させてそれを40分間セッションを張りつづける
上記のようなケースの場合で、session.gc_probabilityを100%にすると、
G.Cが行われるのは、スタートしてから、30分後になって、G.C対象は始めの10分に張った
セッションと言うことになりますよね?
となると、10間に張るセッション数は300件なので
テスト終了後のセッションファイルは
40分(1200本)-10分(300本)=900本
になるはずなんですが、なぜか、残った、セッションファイル数は800本ぐらいですし、
G.Cが発生したのも、正確に30分後ではありませんでした、(2分ぐらい早かった)
もし、このような現象に対して、思い当たる節があれば教えていただきたいのですが・・・
因みにこの現象はsession.gc_probabilityを100%,75%,50%,25%,1%にしても見受けられました。
ただし、1%の場合のみ、大体実行から、30分後にG.Cが発生してくれました。
宜しくお願い致します
No.1
- 回答日時:
GCは、garbage collectinのことですよね?
PHPのgcは、どのタイミングで実施されるかと言えば、
明示的なセッションの開始session_start()を呼ぶか
暗黙のセッション開始session_register()が呼ばれた
際に
php.iniで設定してある
session.gc_probability = 1
session.gc_dividend = 1000
により決定されます。
この場合、gc_probability/gc_dividendの1000分の1
(0.1%)の確率で、実行されます。
単純に計るのではなく、複数のRequestの時間を
loggingし、まったくgcを行わなかった場合との
比較をとらなければ、gcによる負荷は計測出来ない
でしょう。
トラフィックは負荷の間違いですよね。
この回答への補足
回答有難うございます。
senberoさんは、ガーベッジコレクション(以下GC)がセッションの開始直後にphp.ini
の設定により確率が決定されて行われるとありますが、それは、ドキュメント
に明示的に記述されていたのでしょうか?私の調査不足かもしれませんが、
そのようなことが記述されていなかったような気がします。
信用してはいけないと思いますが、海外のサイトの掲示板を見ていて、
GCは、スクリプトの実行終了後と記述されてあった気がします・・・。
宜しくお願い致します。
>トラフィックは負荷の間違いですよね。
おっしゃる通りです。申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セッションのクッキー有効期間...
-
phpのセッションについて
-
phpのheader("Location:#pos")...
-
PHPのif文でその処理を途中で抜...
-
.htaccessにphp_valueが使用できな
-
mysql→EUC-JP、php→UTF-8の時の...
-
2つの画像ファイルが異なるファ...
-
require_once()でファイルが読...
-
phpの中でphpを書けないか
-
FTPコマンドでディレクトリごと...
-
MkDir関数
-
【file_exists】ファイルが存在...
-
sqlで日付が一番古いデータの月...
-
フォームで戻った際に入力済み...
-
<A href ~ と一緒に値を渡すには
-
テレメールとは?
-
「クラス関数」「メンバ関数」...
-
Makefile.inとMakefile.am
-
現在位置より2つ上のディレク...
-
さくらインターネットでメール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
$_SESSION 有効期限をブラウザ...
-
PHP session_destroyとsession...
-
下までスクロールしたらDBの...
-
「セッション管理用のクッキー...
-
セッションを使うと要するに
-
IE11でページ遷移時にセッショ...
-
session_start出来ません。
-
さくらサーバーでsessionが使え...
-
PHPのセッションについて。
-
jqueryの$.ajaxでPHPに値を渡し...
-
以下プログラム(php)のバ...
-
セッションの変数の受渡しについて
-
携帯サイトのセッションについて
-
自動ログアウト
-
session_start();について
-
セッションが変数が取得できません
-
sessionが分かりにくいです
-
PHPのセッション変数 絞り込み...
-
ブラウザの戻る ページ遷移PHP...
-
PHPでpaypal支払後のセッション...
おすすめ情報