【IIS+php】パフォーマンスが出ないとき
問題
IIS+phpでWebシステムを稼動させているのですが、ちょっと多目のアクセスが発生しただけで障害が発生します……
どうもログイン周り、セッション周り、ファイルシステム周りで問題がありそうな雰囲気です。IISだからだめなの?
エラーの例
[10-Sep-2013 07:50:55 UTC] PHP Warning: session_start(): open(C:\Windows\TEMP\sess_xxxxxxgicrfo9q2jxxxxxxto16, O_RDWR) failed: Invalid argument (22) in D:\foo\bar.php on line 48 [10-Sep-2013 07:50:57 UTC] PHP Warning: Unknown: open(C:\Windows\TEMP\sess_xxxxxxgicrfo9q2jxxxxxxto16, O_RDWR) failed: Invalid argument (22) in Unknown on line 0 [10-Sep-2013 07:50:57 UTC] PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct () in Unknown on line 0
問題
phpの設定で特に指定をしなければ、Windows環境ではセッションデータを保存したファイルが \Windows\Temp
に保存される。
\Windows\Temp
の一時ファイル削除のメカニズムはよくわからないのだが、何ヶ月も何年もTempフォルダにphpのセッションファイルやその他のアプリケーションの一時ファイルが残り続けることがあるらしい。
問題を感じた環境では、\Windows\Temp
のフォルダの中には、容量はGB単位、個数は万単位のファイルが残っていた。
もしかすると頻繁にログオフや再起動をする環境ならば定期的に消えてくれたのかもしれないが、Webサーバーを稼動させているとそういう機会が極端に少なかったりもする。
対策
\Windows\Temp
にセッションを保存するデフォルトの設定は、セキュリティ的には改善すべきなのかもしれない。
こちらのWebサイト( iis.net)の手順に従うと、phpをインストールしたフォルダにセッションデータ保存用のフォルダをつくり(c:\php\session
)、権限を適切に設定して、php.iniを書き換えよ(session.save_path = "c:\php\session"
)、とのこと。
100% phpが原因でもないかもしれないが、Tempディレクトリに大量のファイルが生成されていたマシンはTempディレクトリ内を削除することで動作が正常に戻った。
コメント