ホーム > php > php入れ替え(ISAPI→FastCGI)

php入れ替え(ISAPI→FastCGI)

9月頭に自宅サーバのディスク構成を変更し、あわせてOSを Windows Server 2008 R2に入れ替えたのだが…

環境を概ね構築し終えてから、イベントに以下のエラーが頻発するようになった。

ログの名前:System
ソース:Microsoft-Windows-WAS
イベント ID:5009
レベル:警告
説明:
アプリケーション プール ‘DefaultAppPool’ を提供しているプロセスが突然終了しました。プロセス id は ‘3976’ でした。プロセス終了コードは ‘0xc0000374’ でした。

ログを細かく見ていくと、該当のエラーは殆ど次のログ記録の直後に記録されている。つまりワーカープロセスがリサイクルされるタイミングでエラーが発生している、ということの模様…。

ログの名前:System
ソース:Microsoft-Windows-WAS
イベント ID:5186
レベル:情報
説明:
アプリケーション プール ‘DefaultAppPool’ で使用されている ‘3976’ のプロセス ID のワーカー プロセスは、アクティブでなかったためシャットダウンされました。アプリケーション プール タイムアウト構成は、20 分に設定されました。新しいワーカー プロセスは必要なときに開始されます。

php.netのバグレポート#44047を見ると、どうもphp5isapi.dllとiis7の組み合わせがよろしくない模様。ナ、ナンダッテー。
cgiモジュールよりはISAPIの方がパフォーマンスは高い(と思っていた)のですが…エラーログが大量に残るのは気持ちがよろしくないので、FastCGI版にしてみることにした。

せっかく入れ替えるので、速度差を一応確認してみたい。
サーバ上に”Hello World”だけ返すシンプルなphpを配置し、abで多量リクエストをかけた時のパフォーマンスを図る。リクエスト数=100000, 同時リクエスト数100にて試験。

ISAPIの場合

Time taken for tests: 89.539000 seconds
Time taken for tests: 93.195000 seconds
Time taken for tests: 83.291700 seconds

IISのphpの処理をISAPIモジュールからFastCGIモジュールに変更。
サイトのハンドラマッピングから”*.php”に対するマッピングを一度削除。

php.iniの以下を編集

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 1
fastcgi.logging = 0

モジュールマップの追加からFastCGIModuleを選択、php-cgi.exeを指定して新規マッピングを作成し、phpが正常動作することを確認する。500が出る場合、php.iniの記述ミスかアクセス権の設定ミスを疑いませう。

FastCGIの場合

Time taken for tests: 148.257000 seconds
Time taken for tests: 150.854000 seconds
Time taken for tests: 150.854000 seconds

んー。
CentOS上でapache+phpを利用する場合、モジュール版とFastCGI版はあまり速度差がないという話もあるが、こちらは結構差がでてしまった。というかabかけてる最中に「遅ッ!」とか思った。

Linux+apacheで利用する場合はセキュリティの問題でCGI版を使うケースがある模様ですが、IISで利用する場合はISAPIでもFastCGIでも結局実行ユーザはワーカプロセスのユーザになりますから…ISAPIの方が少し幸せになれそう。エラーがでなければ。うぐぅ。

カテゴリー: php タグ:
  1. コメントはまだありません。
  1. トラックバックはまだありません。