PHP セッションは、特にセッションが引き継がれてデータベースに転送される場合、Web サイトに大量のアクセスがあり、セッションが時間内にリサイクルされない場合、期限切れ直後にリサイクルされないことがあります。セッションが急速に増大し、Web サイトのパフォーマンスに影響を与える可能性があります。
最近、同時実行性の高い Web サイトを運用および保守しているときに、セッションが MySQL を使用して保存されているときに、挿入および更新セッションの遅延が非常に大きいことがわかりました。セッション テーブルを見てみると、150 万件近くのレコードがあり、そのほとんどが期限切れになっているようです。
セッションのリサイクルを引き継ぐためにカスタム関数を使用していますが、この関数のトリガーは php.ini の 2 つのパラメーター、session.gc_probability および session.gc_divisor によって決定されます。これらの 2 つのパラメーターのデフォルトは 1 と 1000 です。セッションのリサイクルが実行される確率は 1,000 分の 1 です。この確率は低すぎるため、データベースに多数のセッションの残留物が残り、Web サイトの速度が低下します。
session.gc_probability を 50 に調整します。つまり、セッションがリサイクルされる確率は 1/20 になります。数秒後、php-fpm サービスが数百個しかないことがわかります。セッション テーブル内のデータは数百程度で安定していますが、これは正常です。