php大量sessionメモリ、ハッシュおよび期限切れ回収

2643 ワード

PHP開発ではCookieよりもsessionはサーバ側に格納されたセッションであり,比較的安全であり,Cookieのように格納長の制限がないため,sessionのハッシュおよび期限切れ回収について紹介する.
 
Sessionは、コンピュータ、特にネットワークアプリケーションでは「セッション」と呼ばれています.
1台のサーバのトラフィックは比較的に大きく、プログラムの必要性のため、sessionの期限切れは3時間設定され、/tmpの下に20万近くのsessionファイルが積み上げられた.さらにカーネル占有cpuが急激に上昇した.セッションの読み書きは大量の小さなファイルのランダムな読み書きに関連し,1つのディレクトリに集中しているためiowaitも急激に上昇している.
 
まずセッションをメモリに入れることを考えます
最も簡単な方法は、/tmpをtmpfsファイルシステム、すなわちメモリにマウントすることです.
 
第2ステップでは、セッションを不通のディレクトリに格納します.
php自体はセッションのマルチレベルハッシュをサポートする
php.iniでは、
session.save_path = /tmp;  

に改心
session.save_path = "2;/tmp/session"  

セッションを/tmp/sessionというフォルダに格納し、2およびハッシュを使用することを示します.
保存終了、ステップ3終了後にphpを再起動
 
ステップ3でsessionストレージフォルダを作成する
phpはこれらのフォルダを自動的に作成するわけではありませんが、ソースファイルにはフォルダを作成するスクリプトがいくつか用意されています.次のシナリオも使います
I="0 1 2 3 4 5 6 7 8 9 a b c d e f"   
for acm in $I;   
do   
for x in $I;   
do   
mkdir -p /tmp/session/$acm/$x;   
done;   
done   
chown -R nobody:nobody /tmp/session   
chmod -R 1777 /tmp/session 

/tmpはメモリで、サーバーが再起動すると中のすべてのファイルが失われるので、上のスクリプトを/etc/rcに追加する必要があります.localでphpを起動する前に
 
ステップ4、セッションの回収
セッションはセッションを通っていますgc_maxlifetime以降は期限切れになりますが、すぐに削除されるわけではありません.時間が長くなると/tmpスペースが大きくなります.具体的な削除アルゴリズムは研究するのがおっくうだ.次のコマンドでは、期限切れのセッションを削除できます.ここで定義した期限切れは3時間です.
find /tmp/session -amin +180 -exec rm -rf {} \;  

cronに入れて、10分に1回実行して、終わります.
 
この記事では、Sessionのハッシュと期限切れの回収について4つのステップに分けて紹介します.
 
回転:http://developer.51cto.com/art/201106/269097.htm