プログラムの必要性により、サーバーのトラフィックが比較的多く、セッションの有効期限が 3 時間に設定されているため、/tmp の下に約 200,000 のセッション ファイルが蓄積されます。これにより、カーネルによる CPU 使用率が急激に増加します。セッションの読み書きでは、多数の小さなファイルがランダムに読み書きされ、それらが 1 つのディレクトリに集中するため、iowait も急激に増加します。
まずセッションをメモリに入れることを検討してください
最も簡単な方法は、メモリ内にある tmpfs ファイル システムとして /tmp をマウントすることです
2 番目のステップは、セッションを別のディレクトリに保存することです
php 自体はセッションのマルチレベルのハッシュをサポートしています
php.ini で、
を変更します
;session.save_path = /tmp |
が
に変更されました
session.save_path = "2;/tmp/session" |
は、セッションをフォルダー /tmp/session に保存し、2 とハッシュを使用することを意味します。
保存して終了し、3 番目のステップが完了するまで待って php を再起動します
3 番目のステップは、セッション ストレージ フォルダー
を作成することです。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 番目のステップ、セッションのリサイクル
セッションは session.gc_maxlifetime の後に期限切れになりますが、すぐには削除されません。時間が経過すると、/tmp スペースが占有されます。具体的な削除アルゴリズムを勉強するのが面倒です。次のコマンドは、期限切れのセッションを削除できます。ここで定義する有効期限は 3 時間です。
find /tmp/session -amin +180 -exec rm -rf {} ; |
これを cron に入れて 10 分ごとに実行すれば完了です。