PHPセッションの階層分け

ユーザー数が増えてくると、セッションが多く貯まることになります。

Linuxext3で1つのディレクトリにファイル数が100万件超えてくると、反応が遅くなってき、サイトの反応が悪くなります。

セッションの保存するディレクトリを階層的にわけることによって、反応を早くします。

  1. PHPソースコードをダウンロード
  2. ソースコードの展開

展開したソースディレクトリのext/session/にmod_files.shというスクリプトがあります。
これが、階層を作るスクリプトです。

使い方

sh mod_files.sh [path/to/session] [階層数] [PHPヴァージョン]

具体的には

3階層でPHP5の場合
sh mod_files.sh /var/lib/php/session 3 5

という風に実行します。

あとは、php.ini等を変更します。

session.save_path = "3;/var/lib/php/session"

という風に、パスの前に階層をつけます。

個人的には3階層くらいで十分かなと思ってますが、
それはサイトによって違うので、セッションが多い
WEBサーバーは、階層を深くしたほうがいいですね。

ちなみに、階層分けをすると自動的にセッションが削除されません。
なので、自分でcron等で古いセッションを消す必要があります。

最終更新日が3日以上のセッションを削除するcron
# Delete old session
0 5 * * 0 find /var/lib/php/session -type f -mtime +2 -name 'sess_*' | xargs rm

階層分けが終わったら
session.gc_probability は0に設定しとくといいでしょう。
ガベージコレクションを動かす必要はないので。