0

私は現在、パフォーマンスに関してより正確に大きな問題に直面しています。大量のファイル(+100.000)を含むフラットセッションフォルダーでの大量のI/Oによって生成された負荷。

sessionfiles / htdocsフォルダーは管理対象ストレージにあります-2つの別々のサーバー(ロードバランサーの背後)がnsf-mountを介してこれらのファイル(apache2)を使用し、同じセッションフォルダーに一度にアクセスしています(永続性を維持するため)。

残念ながら、このプロジェクトは頻繁に行われ、大量のセッションファイルを生成しています。2時間のansmax_lifetimeを使用しても、+ 100.000セッションファイルを生成します。これは、IOノードにとって非常に重要です。

これらのセッションをサブフォルダーに動的に分割する可能性はありますか?たとえば、sess_1*を/tmp / sessions / 1に、sess_2を/ tmp / sessions / 2に含むすべてのセッションファイルなど?このアプローチでは、ストレージ/ IOノードは各フォルダーを約10.000処理するだけで済み、ガベージコレクションが高速化され、IOの負荷を防ぐことができます。

PHP(session.save_path)ドキュメントからの抜粋を見つけました。

http://de3.php.net/manual/en/session.configuration.php#ini.session.save-path

このディレクティブには、セッションファイルが分散されるディレクトリレベルの数を決定するオプションのN引数があります。たとえば、「5; / tmp」に設定すると、セッションファイルと/ tmp/4のような場所が作成される可能性があります。 / b / 1 / e / 3/sess_4b1e384ad74619bd212e236e52a5a174If。Nを使用するには、使用する前にこれらのディレクトリをすべて作成する必要があります。これを行うための小さなシェルスクリプトがext/sessionに存在します。これは、mod_files.shと呼ばれ、Windowsバージョンはmod_files.batと呼ばれます。また、Nが使用され、0より大きい場合、自動ガベージコレクションは実行されないことに注意してください。詳細については、php.iniのコピーを参照してください。また、Nを使用する場合は、区切り文字(;)がphp.iniのコメントにも使用されるため、必ずsession.save_pathを「引用符」で囲んでください。

誰かが以前にこれをphpで実装していて、このmod_files.shを使用してサブフォルダー内のセッションファイルを処理するためのサンプルphpコードを提供してくれますか?

残念ながら、その文書化はかなり不十分です...

4

1 に答える 1

2

解決策は、最初に表示されるよりも簡単な場合があります。どういうわけか、PHPはセッションディレクトリツリーへのapacheリクエストを処理および管理する必要があると思いました。ただし、session:save_pathが変更されると、Apacheはそれを独自に実行します。

1.)この(変更された)スクリプト(http://snipplr.com/view/27710/modfilessh-php/)をssh経由で1回呼び出します。

* sh path / to / script / mod_files.sh path / to / sessionsdepth *(私の場合: "mod_files.sh / tmp / sessions 1"

2.)新しいセッションディレクトリツリーのchown権限を再確認します

3。)「session.save_path」を「1; / tmp/sessions」に変更します

それにもかかわらず、あなたの助けに感謝します!

于 2012-08-14T07:50:17.737 に答える