サーバのパフォーマンスが遅くなるcディスクtempフォルダにsess先頭ファイルが大量に存在する問題の原因と解決

3334 ワード

捜査で問題点を見つけて解決したので、参考までに詳しく記録しておきます.
一、tempフォルダ大量ファイルの削除
sessで始まるtempシステムの一時フォルダに存在するファイルはphpのsession保存ファイルであり、phpがsessionを確立したが期限切れになった後に削除に成功しなかったため、大量のファイルの蓄積を招いた.
クリーンアップ方法は簡単で、新しいバッチファイルdel_temp.bat、次のコマンドが書き込まれます.
 
  
del %TEMP% /s /q *.*

保存後にダブルクリックして実行すると、削除処理が開始されます(cmdコマンドラインに直接入力して実行することもできます).システムを再起動するたびに削除処理が実行されるように、起動起動項目に追加することもできます.
ヒント:
1.ここで実行が続行できない場合(志文工房が最初に遭遇した場合)、tempフォルダと一部のファイルが使用されている可能性があります.同じディレクトリの下にフォルダtmpを新規作成し、システム環境変数tempとtmpの位置を変更して、新しい一時ディレクトリを有効にするためにシステムを再起動することができます.この時点でtempファイルを任意に削除できます.
2.志文工房のサーバーtempフォルダには数十万というファイルが存在し、数時間整理してから完成した.したがって、処理を行う前にiisを停止する必要があります.
Netstop iisadmin iisサービスを閉じるnet start iisadmin iisサービスを開く
3.もちろん、処理中にサイトをこんなに長く閉鎖したくないので、順番に行うべき操作は次のとおりです.
1>. iis 2>.php保存セッションのデフォルトパス(後述参照)を変更します3>.iisをオンにして、サーバのすべてのサイトが正常かどうかを確認します4>.del_の実行temp.batクリーンアップ
二、phpのSession保存経路sessionを修正する.save_path
1.phpを開く.iniファイル、検索
";session.save_path="/tmp"は、sessionを格納するために指定された場所に変更されます.たとえば、志文スタジオでは次のように変更されます.
session.save_path=「c:/tmp/phpsession」もちろん、階層ディレクトリを使用することもできます.たとえば、次のように変更します.
session.save_path="5;c:/tmp/phpsession"sessionの階層ディレクトリ格納については後述の詳細を参照してください
2.新規フォルダパス:c:/tmp/phpsession
3.このパス(phpsessionフォルダ)を追加したインターネットゲストアカウントの変更と書き込み権限は、実行権限を与えないことに注意してください. 
4.iisを起動し、ディレクトリに新しいセッションファイルが生成されるかどうかを確認します.
三、phpのsessionマルチレベルディレクトリの保存大量の一時ファイル効率問題を解決sessionマルチレベルの保存は1つのディレクトリの下でsessionファイルが多すぎることによる読み書き効率の問題を緩和することができる.
php.Netでのsesstion構成に関する説明:http://cn.php.net/manual/zh/ref.session.php
session.save_path  string
session.save_pathは、ストレージプロセッサに渡されるパラメータを定義します.デフォルトのfilesファイルプロセッサを選択した場合、この値はファイルを作成するパスです.デフォルトは/tmpです.セッションを参照save_path().この命令には、セッションファイルの分布のディレクトリ深さを決定するオプションのNパラメータもあります.例えば、'5;/tmp'は、作成されたセッションファイルとパスを
/tmp/4/b/1/e/3/sess_4 b 1 e 384 ad 74619 bd 212 e 236 e 52 a 5 a 174 If Nパラメータを使用するには、使用前にこれらのディレクトリを作成する必要があります.ext/sessionディレクトリの下にmod_という小さなshellスクリプトがあります.files.shはこのことをするのに使えます.なお、Nパラメータを用いるNが0より大きい場合、自動ゴミ回収は行われない、phpを参照.ini.またNパラメータを使用する場合はセッションを確実に行う.save_pathの値は、区切り記号(;)php.iniでもコメント記号です.
以上の説明を参照して、セッションを定義.save_pathではマルチレベルの格納経路を定義できるのでphpを変更することができる.iniのセッションsave_path:
session.save_path="2;/data/session_tmp"このようにsessionファイルを2段階に分けて保存します.すなわち、
/data/session_tmp/4/b/sess_4 b 1 e 384 ad 74619 bd 212 e 236 e 52 a 5 a 174 Ifはセッションの最初の2桁の文字を2級ディレクトリインデックスとして取得するが、phpはディレクトリを生成せず、自分で手作業で生成する必要があり、ここではphpスクリプトを提供して初期ディレクトリを生成する.
 
  
$string = '0123456789abcdefghijklmnopqrstuvwxyz';
$length = strlen($string);
function makeDir($param)
{
 if(!file_exists($param)) {
  echo "mkdir ".$param."
”;
  exec("mkdir ".$param);
 }
}

for($i = 0; $i < $length; $i++) {
 for($j = 0; $j < $length; $j++) {
  makeDir('/data/session_tmp/'.$string[$i].'/'.$string[$j]);
 }
}
?>


sessionディレクトリ階層処理後,IO処理値が増加し,httpプロセスが低下し,web処理効率が著しく好転した
関連リファレンス
session.save_pathディレクトリの大量sessionテンポラリファイルによるサーバ効率の問題http://wenku.baidu.com/view/b3921d8ea0116c175f0e484e.htmlIISPHP環境Tempフォルダの権限問題によるサイト障害//www.jb 51.net/article/34301.htm