2.4. JBoss EAP の正常な一時停止およびシャットダウン
JBoss EAP は正常に一時停止およびシャットダウンできます。これにより、新しいリクエストを許可せずにアクティブなリクエストを正常に完了できます。タイムアウト値は、一時停止またはシャットダウン操作がアクティブなリクエストの完了まで待つ期間を指定します。サーバーが一時停止しても管理リクエストは処理されます。
正常なシャットダウンは、リクエストがサーバーに入るエントリーポイントを中心にサーバー全体のレベルで調整されます。以下のサブシステムが正常なシャットダウンをサポートします。
- Undertow
-
undertow
サブシステムはすべてのリクエストが終了するまで待機します。 - mod_cluster
-
modcluster
サブシステムはPRE_SUSPEND
フェーズでサーバーが一時停止することをロードバランサーに通知します。 - EJB
-
ejb3
サブシステムはすべてのリモート EJB リクエストおよび MDB メッセージ配信が終了するまで待機します。MDB への配信はPRE_SUSPEND
フェーズで停止します。EJB タイマーは中断され、サーバーが再開したときにタイマーがアクティベートされます。 - EE Concurrency
サーバーはすべてのアクティブなジョブが終了するまで待機します。キューに置かれたジョブはすべてスキップされます。現在、EE Concurrency には永続性がないため、キューに置かれスキップされたジョブは失われます。
サーバーが一時停止状態である間、スケジュールされたタスクはスケジュールどおりの時間に実行されますが、
java.lang.IllegalStateException
が発生します。サーバーが再開されると、スケジュールされたタスクは通常どおり実行され、ほとんどの場合でタスクのスケジュールを変更する必要はありません。- Batch
- サーバーはタイムアウト期間内の実行中のジョブをすべて停止し、スケジュール済みのジョブをすべて延期します。
正常なシャットダウンでは、現在、受信リモート分散トランザクションまたは新しい受信 JMS メッセージは拒否されません。現在、進行中のアクティビティーによってスケジュールされた EE バッチジョブと EE 同時実行タスクは続行できます。ただし、タイムアウトウィンドウを通過して送信された EE 同時実行タスクは、現在、実行時にエラーが発生します。
リクエストは request-controller
サブシステムによって追跡されます。このサブシステムがないと、サスペンドおよび再開の機能が制限され、サーバーはリクエストの完了を待たずにサスペンドまたはシャットダウンします。ただし、この機能が必要ない場合は、リクエストコントローラー
サブシステムを削除してパフォーマンスをわずかに向上させることができます。
2.4.1. サーバーの一時停止
JBoss EAP 7 には、サーバーの操作を正常に一時停止する suspend モードが導入されました。このモードでは、アクティブなリクエストがすべて正常に完了されますが、新しいリクエストは許可されません。サーバーが中断されたら、シャットダウンすることができます。 さらに、元の実行状態に戻ったり、中断状態のままメンテナンスを実行することができます。
管理インターフェイスのサーバーの一時停止よる影響はありません。
管理コンソールまたは管理 CLI を使用するとサーバーを一時停止および再開できます。
サーバーの一時停止状態のチェック
以下の管理 CLI コマンドを使用するとサーバーの中断状態を表示できます。結果の値は、RUNNING
、PRE_SUSPEND
、SUSPENDING
、または SUSPENDED
のいずれかになります。
スタンドアロンサーバーの中断状態をチェックします。
:read-attribute(name=suspend-state)
マネージドドメインのサーバーの中断状態をチェックします。
/host=master/server=server-one:read-attribute(name=suspend-state)
中断
アクティブなリクエストが完了するまでサーバーが待機するタイムアウト値を秒単位で指定し、以下の管理 CLI コマンドを使用してサーバーを中断します。デフォルト値は 0
で、即座に中断します。-1
を値として指定すると、サーバーはアクティブなリクエストがすべて完了するまで無期限に待機します。
以下の各例は、リクエストが完了するまで最大 60 秒待機した後、一時停止します。
スタンドアロンサーバーを一時停止します。
:suspend(timeout=60)
マネージドドメインのすべてのサーバーを一時停止します。
:suspend-servers(timeout=60)
マネージドドメインの単一のサーバーを一時停止します。
/host=master/server-config=server-one:suspend(timeout=60)
サーバーグループのすべてのサーバーを一時停止します。
/server-group=main-server-group:suspend-servers(timeout=60)
再開
resume
コマンドを適切なレベル (サーバー、サーバーグループ、ドメイン全体) で使用すると、サーバーが正常な実行状態に戻り、新しいリクエストを許可できるようになります。以下に例を示します。
:resume
2.4.2. サーバーを正常にシャットダウンする
サーバーの停止時に適切なタイムアウト値を指定すると、サーバーは正常にシャットダウンされます。コマンドを実行するとサーバーが一時停止され、すべてのリクエストが完了するまで最大で指定のタイムアウトの期間待機し、その後シャットダウンします。
以下の管理 CLI コマンドを使用してサーバーを正常にシャットダウンします。アクティブなリクエストが完了するまでサーバーが待機するタイムアウト値を秒単位で指定します。デフォルト値は 0
で、即座にサーバーをシャットダウンします。-1
を値として指定すると、アクティブなリクエストがすべて完了するまで無期限に待機した後、シャットダウンします。
以下の各例は、リクエストが完了するまで最大 60 秒待機した後、シャットダウンします。
スタンドアロンサーバーを正常にシャットダウンします。
:shutdown(timeout=60)
マネージドドメインのすべてのサーバーを停止します。
:stop-servers(timeout=60)
マネージドドメインの単一のサーバーを停止します。
/host=master/server-config=server-one:stop(timeout=60)
サーバーグループのすべてのサーバーを正常に停止します。
/server-group=main-server-group:stop-servers(timeout=60)