概要
Webアプリケーション(JSPファイル)への初回リクエスト受信時に行われるJSPコンパイル処理または
そのクラスロードの処理においてタイムアウトが発生するとMissingResourceExceptionがログに出力されます。
影響のある製品
- WebOTX Application Server Standard V9.2~V9.4
- WebOTX Application Server Enterprise V9.2~V9.5
- WebOTX Application Server Standard V10.1
詳細
以下の条件をすべて満たす場合に発生します。
- Webアプリケーションが動作するプロセスグループのプロセス多重度を2以上に指定
- Webアプリケーションをプロセスグループに配備する際に次の設定をしておらず、JSPが事前コンパイルされていない
[otxadminコマンドを使用の場合] 「--precompilejsp=true」の指定
[Web版運用管理コンソールを使用の場合] 「JSPコンパイル」にチェック
[統合運用管理ツールを使用の場合] 「JSPコンパイル」にチェック
- JSPファイルのコンパイル、およびクラスロードの処理においてプロセス間排他のロック解放待ちでタイムアウト(既定値 2秒)が発生
Webアプリケーションをプロセスグループに配備する際にJSPの事前コンパイルを行う設定をしていない場合、JSPへ初回のリクエスト受信時にJSPコンパイルが行われます。
1つのJSPに対して複数クライアントから同時にリクエストを受け付け、それらをプロセスグループ上の別プロセスで処理する場合、複数のプロセス間でJSPコンパイル処理が衝突することを防止するように排他制御をしています。
後からリクエストを受け付けたプロセスがロック解放待ち時間を超過してタイムアウトが発生すると、本来であればタイムアウトしたことを示すメッセージを生成しログファイルに記録しますが、このメッセージ生成処理に問題があり、MissingResourceExceptionが発生してログに出力されます。
なお、Webアプリケーションの呼び出し元には本来の動作であるタイムアウトを起因としたHTTPステータスコード500のエラーを返却するため、アプリケーションの動作には影響ありません。
対処方法
回避方法
以下のいずれかの方法により、本問題を回避することが可能です。
- 配備されたWebアプリケーション(全てのJSPファイル)に対して、運用開始前に、競合が発生しないよう順番にリクエストします。
このリクエストの延長でJSPコンパイルが行われます。JSPコンパイルが正常に完了すると、以降、JSPコンパイルもその競合によるロック解放待ちタイムアウトも発生しないため、本問題が回避されます。
- JSPの事前コンパイルを指定してWebアプリケーション(JSPファイル)を配備します。
[otxadminコマンドを使用する場合]
deployコマンドのオプションに"--precompilejsp=true"を指定する。
【コマンド例】
otxadmin> login --user <ユーザ名> --password <パスワード> --host <ホスト名> --port <対象ドメインの管理ポート>
otxadmin> deploy --apgroup <アプリケーショングループ名> --pgroup <プロセスグループ名> --precompilejsp=true <warファイルへのパス>
[Web版運用管理コンソールを使用する場合]
[アプリケーション]ノード
> [配備]タブ
> 詳細項目の表示で
「JSPコンパイル」にチェックを入れる。
[統合運用管理ツールを使用する場合]
ドメインと接続
> ツリービューから[アプリケーション]を選択
> 右クリックメニューで[コンポーネントの配備]を選択
> [コンポーネント配備ウィザード]で必要事項を入力して[次へ]
> [基本関連情報]で必要事項を入力して[次へ]
> [Webモジュール関連情報]で「JSPコンパイル」にチェックを入れる
> [配備]をクリックして配備実行
備考
- 「プロセスグループのプロセス多重度」の確認方法は以下の通りです。
[otxadminコマンドを使用する場合]
getコマンドを使用して値を取得する
get tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.processCount
【コマンド例】
otxadmin> login --user <ユーザ名> --password <パスワード> --host <ホスト名> --port <対象ドメインの管理ポート>
otxadmin> get tpsystem.applicationGroups.<アプリケーショングループ名>.processGroups.<プロセスグループ名>.processCount
[Web版運用管理コンソールを使用する場合]
[TPシステム]ノード
> アプリケーショングループ
> <アプリケーショングループ名>
> プロセスグループ
> <プロセスグループ名>
> 「プロセス制御」タブ
「プロセス数」の値がプロセス多重度を示す。
[統合運用管理ツールを使用する場合]
ドメインと接続
> ツリービューから[TPシステム]を選択
> アプリケーショングループ
> <アプリケーショングループ名>
> プロセスグループ
><プロセスグループ名>
> 「プロセス制御」タブ
「プロセス数」の値がプロセス多重度を示す。
- 「JSPファイルのコンパイル、およびクラスロードの処理においてプロセス間排他のロック解放待ちでタイムアウト(既定値 2秒)が発生」の確認方法は以下の通りです。
Webアプリケーションのリクエストに対して、以下の事象が2つとも発生していることを確認してください。
1)プロセスグループのログ(※1)に「MissingResourceException」が記録されている。
2)Webサーバのアクセスログに、JSPファイルのリクエストでHTTP500エラーが発生している事が記録されている
(※1) <ドメインのルートディレクトリ>\logs\tpsystem\<アプリケーショングループ名>\<プロセスグループ名>フォルダ配下に<プロセスグループ名>.<プロセスID>.logというファイル名で作成されます。
更新履歴
2019/05/22 初版
2019/09/02 第2版 ■備考に発生条件の確認方法を追記。
■詳細、■回避方法、■備考に統合運用管理コンソールでの方法を追記。