SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

【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

iis-and-php

問題

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ディレクトリ内を削除することで動作が正常に戻った。

関連するメモ

コメント