PHP のガベージ コレクション メカニズムはメモリ オーバーフローを防止します
PHP 言語には、Java などの他の言語と同様に、ガベージ コレクション メカニズムがあります。プログラムの開発および設計プロセスにおいて、ガベージ コレクションに注意を払うことは、Web サイトの動作効率を向上させ、メモリ オーバーフローを防ぐのに役立ちます。
以下では、PHP ガベージ コレクション メカニズムに関連する問題について詳しく説明します。皆さんのお役に立てれば幸いです。
PHP では、オブジェクトを指す変数が存在しない場合、オブジェクトはガベージになります。
PHP はメモリ内でこれを破棄します。これは、メモリのオーバーフローを防ぐための PHP の GC ガベージ処理メカニズムです。
PHP スレッドが終了すると、現在占有されているすべてのメモリ領域が破棄され、現在のプログラム内のすべてのオブジェクトが同時に破棄されます。
GC プロセスは通常、セッションごとに実行を開始します。.gc の目的は、セッション ファイルの有効期限が切れた後に、セッション ファイルを自動的に破棄して削除することです。
__destruct() ガベージ オブジェクトがリサイクルされるときにデストラクターが実行されます。
unset は、オブジェクトではなく、オブジェクトを指す変数を破棄します。
と PHP のガベージ コレクション メカニズムのため、PHP にはセッション情報を定期的にスキャンして無効かどうかを判断するデーモン スレッドがありません。有効なリクエスト これが発生すると、PHP はグローバル変数 session.gc_probability および session.gc_divisor の値に基づいて GC を有効にするかどうかを決定します。
デフォルトでは、session.gc_probability=1、session.gc_divisor =100 は、GC が開始される可能性が 1% であることを意味します (つまり、100 リクエストのうち 1 つの gc のみが 100 リクエストを伴います)。リクエスト)。
PHP ガベージ コレクション メカニズムの仕事は、すべてのセッション情報をスキャンし、現在の時刻からセッションの最終変更時刻を減算し、生存時間が gc_maxlifetime を超えているかどうかを session.gc_maxlifetime パラメーターと比較することです。 (デフォルトは 24 分)、セッションを削除します。
ただし、Web サーバーに複数のサイトがある場合、GC が複数のサイトでセッションを処理すると予期しない結果が生じる可能性があります。その理由は、GC が動作しているときに、異なるサイトのセッションが区別されないためです。
では、この時点でそれを解決するにはどうすればよいでしょうか? 1. session.save_path を変更するか、session_save_path() を使用して各サイトのセッションを専用のディレクトリに保存します。 2. GC の起動率を指定します。当然のことながら、PHP ガベージ コレクション メカニズムの起動率が増加すると、それに応じてシステムのパフォーマンスが低下するため、推奨されません。 3. コード内の現在のセッションの生存時間を確認し、session_destroy() を使用して削除します。