ホームページ  >  記事  >  バックエンド開発  >  PHPセッションのガベージコレクションメカニズム

PHPセッションのガベージコレクションメカニズム

藏色散人
藏色散人転載
2020-05-16 13:32:442073ブラウズ

PHP では、このオブジェクトを指す変数がない場合、このオブジェクトはガベージになります。 PHP はこれをメモリ内で破棄します。これは、メモリ オーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。

GC の仕事は、すべての Session 情報をスキャンし、session.gc_maxlifetime と同じように、現在の時刻から session の最終変更時刻を減算することです。 パラメータを比較して、生存時間が gc_maxlifetime (デフォルトは 24 分) を超える場合、セッションは削除されます。

有効なリクエストが発生すると、PHP はグローバル変数 session.gc_probability および session.gc_divisor の値に基づいて GC を有効にするかどうかを決定します。この場合、

session.gc_probability = 1
session.gc_divisor = 100

つまり、GC が開始される可能性は 1% です (つまり、100 リクエストのうち 1 つのリクエストで GC が開始されるのは 100 リクエストのうち 1 つだけです)。

ただし、Web サーバーに複数のサイトがある場合、複数のサイトでセッションを処理すると GC で予期しない結果が生じる可能性があります。その理由は、GC が動作している場合、異なるサイトのセッションが区別されないためです。

では、この時点でそれを解決するにはどうすればよいでしょうか?

1. session.save_path を変更するか、session_save_path() を使用して、各サイトの session を専用のディレクトリに保存します。 ;

2. GC の起動速度を上げます。GC の起動速度が上がると、それに応じてシステムのパフォーマンスが低下します。お勧めできません。;

3. 現在の # を決定します。コード内の ##session。 の生存時間、session_destroy()delete;

session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440

を使用します。これら 3 つの構成の組み合わせにより、サーバー側セッションのガベージ コレクション メカニズムが構築されます

session.gc_probabilitysession.gc_divisor は、セッション クリーニングを実行する確率を構成します。理論的な説明は、サーバーが定期的に gc 関数を呼び出す一定の確率があるということです。セッションをクリーンアップします。クリーンアップの確率は次のとおりです: gc_probability/gc_divisor たとえば: 1/100 は、新しいセッションが初期化されるたびに

# が存在することを意味します。 ##1%

ガベージ コレクション プログラムが開始され、クリーンアップされる確率。標準は、session.gc_maxlifetime で定義された時間です。

session.gc_divisor

session.gc_probability は、各セッションの初期化時に開始される gc (ガベージ コレクション ガベージ コレクション) プロセスを一緒に定義します。 . 確率。 この確率は、

gc_probability/gc_divisor

を使用して計算されます。たとえば、1/100 は、各リクエストで gc プロセスが開始される確率が 1% であることを意味します。 session.gc_divisor デフォルトは 100 です。 例:

session.gc_maxlifetime = 60
session.gc_divisor = 1000
session.gc_probability = 1

は、1,000 人のユーザーが

session_start()

を呼び出すたびに、ガベージ コレクション メカニズムが 100% 実行され、ガベージ コレクション メカニズムは不要なセッションファイルを削除してください。 注: 一般に、一部の大規模ポータルでは、オーバーヘッドを削減するために

session.gc_divisor

を増やすことをお勧めします。次に、構成のみで行う方法を例を通して説明します。 gc (ガベージコレクション) プロセスを呼び出すことはできますか?

php.ini ファイルを設定することで、次の情報を変更します。

session.gc_maxlifetime = 60//当session文件在60s后还没有被访问的话,则该session文件将会被视为“垃圾文件”,并且等待gc(垃圾回收)进程的调用的时候被清理掉
session.gc_probability = 1000

gc プロセスが呼び出される確率は

gc_probability/gc_divisor

を通じて計算されるため、ここではsession.gc_probability1000 に変更し、session.gc_divisor もデフォルトでは 1000 です。 gc プロセスは、session_start() 関数が実行されるたびに呼び出されます。 3 つのセッションが開かれると、対応する 3 つの

session

ファイルが作成されます。各ファイルが 60 秒以内に呼び出されないと、「ジャンク ファイル」とみなされます。プロセスが呼び出されると、php.ini 構成ファイルを変更して gc が呼び出される確率を 100% に変更したため、「ジャンク ファイル」は unlink になります。次に、ブラウザを使用してページを更新すると、3 つの session ファイルのうち 1 つだけが残るはずです。<pre class="brush:php;toolbar:false">session.save_handler = files</pre>デフォルトはファイルで、サーバー側の保存方法でセッションを定義します。 ,

file

は、session を一時ファイルに保存することを意味します。他の保存方法 (データベースの使用など) をカスタマイズしたい場合は、この項目を保存する必要があります。 に設定します。ユーザー###。 関連する推奨事項: 「PHP チュートリアル

以上がPHPセッションのガベージコレクションメカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。