IIS7.x-Tomcat連携に関する注意点

こんにちは、El Guajeです。

今回は最近気づいたIIS7.x-Tomcat連携に関する注意点について投稿します。

1. パフォーマンスが遅い
Apache Tomcatのサイトで提供されているTomcat ConnectorsのIIS用のモジュール「isapi_redirect.dll」を利用してIIS7またはIIS7.5とTomcatを連携すると、パフォーマンスが非常に遅くなることが確認されました。

どのぐらい遅いかというと、5MBぐらいのファイルのアップロードにTomcat単体だと1秒もかからないところがIIS7+Tomcat連携だと30秒かかるといった具合です。
(ファイルのダウンロードも同様。)

Tomcat単体およびIIS6-Tomcat連携では発生しないため、当初IIS7側の問題だと思っていましたが、苦労の末に分かった本当の原因は「isapi_redirect.dll」が非常に古いIISバージョン(Windows NT/IIS4.0)を想定して実装されていることでした。

IIS7以降はMicrosoftから「Application Request Routing」(最新バージョンは2.1)というモジュールが提供されており、そのモジュールを利用してTomcatと連携することができます。
実際に簡易確認したところでは、パフォーマンスの問題がなく連携できました。

参考情報:
Slow Performance After Connecting Tomcat With IIS 7
Astonishing Tomcat Connector Status
Application Request Routing
How You Can Use IIS7 as Web Front End to Java App Servers

*** 2011年01月06日 追記 : 追加調査の結果、isapi_redirect.propertiesファイル内のlog_levelがdebugに設定されている場合にパフォーマンスが大幅に低下することを確認されました。log_levelがwarnの時にはパフォーマンスに問題がありませんでした。IIS7-Tomcat6連携のlog_levelの記述も修正いたしました。 ***

2. 30MB以上のファイルがアップロードできない
こちらもTomcat単体およびIIS6-Tomcat連携では発生しないのですが、IIS7-Tomcat連携においてデフォルトでは30MB以上のファイルのアップロードができません。
これは、IIS7からリクエスト時に許可されるコンテンツの最大長に制限がかかっており、デフォルトでは「30000000(バイト)」です。

IISのGUIの管理用スナップインにて、設定したいサイトの「要求フィルター」メニューをダブルクリックして開き、開いた画面上で右クリックして[機能設定の編集...]を選択すると、[要求制限]の中に[許可されたコンテンツ最大長(バイト)]というメニューから設定を変更することが可能です。

※IIS7.0の場合は、Administration Packをインストールする必要があります。

または、appcmdを使用してコマンドラインから設定変更することが可能です。
以下はサイト”Default Web Site”に対して[許可されたコンテンツ最大長(バイト)]を”50000000″に設定する例です。

%windir%\system32\inetsrv\appcmd.exe set config “Default Web Site” -section:system.webServer/security/requestFiltering /requestLimits.maxAllowedContentLength:”50000000″ /commit:apphost

なお、設定可能な最大長は4GB(4294967295バイト)です。

IIS7以降でTomcatと連携を考える場合は注意されたし。

タグ: , , , , , ,

コメントは受け付けていません。