WAS 小ワザ集 第34回:WARファイルのライブラリJARからファイルやJSPの読み込みを抑止する

 View Only
Tue February 22, 2022 08:15 PM

オリジナル文章公開日: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 小ワザ集:目次ページにもどる

Statistics
0 Favorited
6 Views
0 Files
0 Shares
0 Downloads