オリジナル文章公開日:2014年9月8日
WAS V8.xがサポートしているServlet API 3.0では,Webリソースのモジュール化がサポートされました。WARファイルのWEB-INF/libに配置したJARファイルのMETA-INF/resourcesディレクトリ以下にJSPファイルやHTML/CSSなどの静的コンテンツを格納しておくことができます。
クライアントからリクエストされた静的コンテンツやJSPがWARファイルの通常のディレクトリに見つからなかった場合は,JARファイルの中に含まれていないか検索する処理が実行されます。そのため,WARファイルに大量のJARファイルが含まれているアプリケーションに対して,存在しないURLをもったリクエストを大量に送信した場合,アプリケーションサーバーの負荷が非常に高くなることがあります。
このような症状が発生している状態でWASのアプリケーションサーバーのスレッドダンプを取得すると,以下のようなスタックトレースをもつスレッドが大量に記録されます。
java/util/zip/ZipFile.open(String, int, long, boolean)
java/util/zip/ZipFile.<init>(java.io.File, int)
java/util/jar/JarFile.<init>(java.io.File, boolean, int)
java/util/jar/JarFile.<init>(java.io.File)
com/ibm/ws/webcontainer/util/MetaInfResourcesFileUtils.findInMetaInfResource(java.io.File[], String)
com/ibm/ws/webcontainer/util/MetaInfResourcesFileUtils.findInMetaInfResource(String)
com/ibm/ws/webcontainer/util/DocumentRootUtils.handleDocumentRoots(String,boolean, boolean, boolean, java.util.Map)
com/ibm/ws/webcontainer/util/DocumentRootUtils.handleDocumentRoots(String,java.util.Map)
com/ibm/ws/webcontainer/util/DocumentRootUtils.getDocumentRealPath(String,java.util.Map)
com/ibm/ws/webcontainer/webapp/WebApp.getRealPath(String)
アプリケーションがモジュール化されたWebリソースを使用していない場合,JARファイルのMETA-INF/resourcesディレクトリからJSPや静的コンテンツを検索しないようにすることができます。Webコンテナのカスタムプロパティとして,以下のものを設定してください。
名前 |
com.ibm.ws.webcontainer.SkipMetaInfResourcesProcessing |
値 |
true |
Libertyプロファイルを使用している場合は,server.xmlに<webContainer>タグを追加し,skipMetaInfResourcesProcessing属性にtrueを設定してください。
<webContainer skipMetaInfResourcesProcessing="true" ></webContainer>
→ WAS 小ワザ集:目次ページにもどる