救済措置とは、メモリ予兆監視やアプリケーションタイムアウト監視により、JavaアプリケーションおよびJavaVMの異常状態を検知した場合に、JavaVMを切り替えることで安全かつ安定した業務継続を実現し、異常が発生したJavaVMに対してJavaVMの再起動またはガーベジコレクション実行を行うことで新たな待機JavaVMとして転生する機能です。
下表に救済措置を示します。
救済措置の動作として、以下の4種類の動作の中から選択します。救済措置は定義ファイルに設定します。なお、 アプリケーションタイムアウト監視により事象を検出した場合には、JavaVMの再起動が実行されます。
救済措置の名前 | 処理内容 | 監視する対象 |
---|---|---|
JavaVM再起動 |
|
|
転生JavaVM再起動 |
|
|
リセット |
|
|
転生リセット |
|
|
定義の詳細については、“Interstage Business Application Server リファレンス”の“アプリケーション安定稼動機能定義リファレンス”を参照してください。
■メモリ予兆監視のしきい値
救済措置を始める契機として、事象を検知するためのJavaヒープ領域の使用量のしきい値を決めます。しきい値と救済措置は、Javaヒープ領域のヒープ領域およびPermanent世代領域それぞれ1個または2個設定します。救済措置はしきい値ごとに設定します。しきい値と救済措置の種類は、“Interstage Business Application Server リファレンス”の“アプリケーション安定稼動機能定義リファレンス”を参照してください。
救済措置を設定する場合、“しきい値と救済措置の設定例”を元にしきい値と救済措置を調整します。
しきい値 | 救済措置 | |
---|---|---|
第1しきい値 | 待機JavaVMを活性化することができるように、低めのしきい値を設定します。(例:50%) | 転生リセット |
第2しきい値 | 新規リクエスト振り分け停止後、処理中アプリケーションがすべて完了するまでにガーベジコレクションが発生しないよう、しきい値を設定します。(例:80%) | リセット |
上表の考え方は、次のとおりです。
第1しきい値を超過したら待機JavaVMが出現するまで待ち合わせてガーベジコレクションを実行する
第1しきい値を超過しても待機JavaVMが出現せず、リクエスト切り換えができないまま第2しきい値を超過した場合、待機JavaVMの出現を待たずにガーベジコレクションを実行する
設定例の第1しきい値の救済措置では、待機JavaVMが出現するまで待ち続けます。待機JavaVMが出現しない場合には、第1しきい値を超えたJavaVMは何時までも転生せずに待機JavaVMとして利用することができません。このような状態を防ぐために、第2しきい値を設定し、第2しきい値の救済措置としては待機JavaVMの出現を待たないように設定することにより、待機JavaVMを出現させ、新たな事象に備えるように考えます。
第1しきい値の救済措置として“転生JavaVM再起動”、第2しきい値の救済措置として“JavaVM再起動”を設定することもできます。
運用JavaVMにおいてリクエスト処理中に、メモリ予兆監視およびアプリケーションタイムアウト監視により事象を検知した場合、待機JavaVMにリクエストの振り分けを行い、事象を検知した運用JavaVMへの新規リクエストの振り分けを停止します。
事象を検知した運用JavaVMにおいて、新規リクエストの振り分け停止後にアプリケーションの終了を待ち合わせます。セション管理していない場合は、アプリケーション終了後、JavaVMの再起動またはガーベジコレクションを実行します。セション管理している場合は、セションが存在しない状態になるまで待ち合わせたあと、JavaVMの再起動またはガーベジコレクションを実行します。アプリケーション最大処理時間を経過してもアプリケーションが終了しない場合はJavaVMを再起動します。
ServletアプリケーションまたはSTATEFUL Session Beanが配備されている場合、すべてのセションが無効になるまで待ち合わせを行います。STATEFUL Session Beanではremoveクラスを呼び出してSession Beanのインスタンスを消去していない場合、無通信監視時間(デフォルト30分)を超過するまで待ち合わせを行います。無通信監視時間の詳細は、“Interstage Application Server J2EE ユーザーズガイド(旧版互換)”を参照してください。
リクエストの振り分け切り換え後、メモリ予兆監視およびアプリケーションタイムアウト監視により事象を検知した運用JavaVMは、救済措置の設定に従って待機JavaVMに転生します。運用JavaVMから待機JavaVMに転生することにより新たな事象発生に備えます。
救済措置が“JavaVM再起動”または“転生JavaVM再起動”の場合、事象を検知した運用JavaVMは次の流れで再起動して待機JavaVMへ転生します。
調査情報の出力
アプリケーションや動作環境の問題を確認するため以下の情報を出力します。
デッドロック情報
スレッドダンプ情報
通常停止
実行中のJavaアプリケーションの終了を待ってJavaVMを通常停止します。
強制停止
JavaVMの通常停止ができない場合に限り、JavaVMの強制停止を行います。
再起動
JavaVMの通常停止および強制停止がリトライカウントに達するまで、再起動を行います。リトライカウントに達した場合は、正常運用中のJavaVMも含めて強制停止します。
JavaVMの再起動の回数は、[Interstage管理コンソール] > [Interstage Application Server] > [システム] > [ワークユニット] > (ワークユニット名) の [環境設定] > [ワークユニット設定] > [リトライカウント]で設定します。
救済措置が“リセット”または“転生リセット”の場合、事象を検知した運用JavaVMは待機JavaVMとなるためにガーベジコレクションを実行します。ガーベジコレクションを実行して待機JavaVMに転生することにより、リクエスト処理中にガーベジコレクションが発生しない運用を実現します。
■ガーベジコレクション実行後もメモリ使用量が改善しない場合
ガーベジコレクションを実行してもメモリ使用量がしきい値を超過する場合は、メモリリークの可能性があると判断しJavaVMを再起動します。JavaVM再起動時には次のエラーメッセージを出力します。
FSP_INTS-BAS_AP: WARNING: 12080: Because the memory usage exceeds the threshold after executing FullGC, the JavaVM is reactivated. WU=s*, pid=t*, instanceNo=u*, generationType=v*, max=w*, used=x*, thresholdIndex=y*
ガーベジコレクション実行後もメモリ使用量がしきい値を超過する場合の動作は、定義ファイルで変更することができます。詳細は、“Interstage Business Application Server リファレンス”の“アプリケーション安定稼働機能定義リファレンス”を参照してください。