2.3. JBoss EAP の正常な一時停止およびシャットダウン


JBoss EAP は正常に一時停止およびシャットダウンできます。これにより、新しいリクエストを許可せずにアクティブなリクエストを正常に完了できます。タイムアウト値を指定すると、アクティブなリクエストが完了するまでに、一時停止またはシャットダウン操作が待機します。サーバーが一時停止しても管理リクエストは処理されます。

一時停止と正常なシャットダウンは、リクエストがサーバーに入るエントリーポイントに重点を置きながら、サーバー全体で調整されます。次のサブシステムは、一時停止と正常なシャットダウンをサポートしています。

Undertow
undertow サブシステムはすべてのリクエストが終了するまで待機します。
mod_cluster
modcluster サブシステムは PRE_SUSPEND フェーズでサーバーが一時停止することをロードバランサーに通知します。
Jakarta Enterprise Beans
ejb3 サブシステムは、すべてのリモートセッション Bean リクエストおよび MDB メッセージ配信が完了するまで待機します。MDB への配信は PRE_SUSPEND フェーズ中に停止します。Jakarta Enterprise Bean タイマーが中断されます。サーバーが再開すると、見落とされたタイマーがアクティブ化されます。
トランザクション

サーバーは一時停止されると、新しいリクエストを受け入れなくなります。ただし、進行中のトランザクションとリクエストは、完了するか、タイムアウト期間が経過するまで続行できます。たとえば、サーバーは、一時停止中のサーバーにおけるアクティブなトランザクションに関連する受信リモート呼び出しを受け入れます。

これは、XTS トランザクションに関連する Web サービスリクエストにも適用されます。

正常なシャットダウンの前にトランザクションを開始し、それが失敗した場合 (必要なデータベースが使用できないなど)、そのトランザクションは自動的に回復されません。正常なシャットダウン処理により、リカバリーマネージャーが機能しない可能性があるためです。リカバリーマネージャーを利用して失敗したトランザクションを完了するには、JBoss EAP インスタンスを再開する必要があります。

デフォルトでは、ejb3 サブシステムでのトランザクションの正常なシャットダウンは無効になっています。Jakarta Enterprise Beans 関連のトランザクションが完了してからサーバーを一時停止する場合は、トランザクションの正常シャットダウンを有効にする必要があります。以下に例を示します。

/subsystem=ejb3:write-attribute(name=enable-graceful-txn-shutdown,value=true)

この動作はデフォルトでは無効になっています。正常なシャットダウン中に Jakarta Enterprise Beans クライアントがクラスターノードを呼び出す可能性があるためです。クラスター環境では、トランザクションが完了した 、サーバーがリモートクライアントに、ノードがリモート呼び出しに使用できなくなったことを通知します。クライアントがこの時間枠内 (トランザクションが完了する前) にシャットダウン中のノードに新しいリクエストを送信すると、ノードはそのリクエストを拒否します。

Jakarta Concurrency

サーバーはすべてのアクティブなジョブが終了するまで待機します。キューに置かれたジョブはすべてスキップされます。Jakarta Concurrency には永続性がないため、スキップされたキュー内のジョブはすべて失われます。

サーバーが一時停止状態である間、スケジュールされたタスクはスケジュールどおりの時間に実行されますが、java.lang.IllegalStateException が発生します。サーバーが再開すると、スケジュールされたタスクは引き続き正常に実行されます。ほとんどの場合、タスクを再スケジュールする必要はありません。

Batch
サーバーはタイムアウト期間内の実行中のジョブをすべて停止し、スケジュール済みのジョブをすべて延期します。
注記

現在、正常なシャットダウンは、新しいインバウンド Jakarta Messaging メッセージを拒否しません。インフライトアクティビティーによってスケジュールされた Jakarta Batch ジョブおよび Jakarta Concurrency タスクは、現在実行の継続が許可されます。しかし、タイムアウトウインドウを渡す Jakarta Concurrency タスクが提出されると、実行時にエラーが発生します。

リクエストは request-controller サブシステムによって追跡されます。このサブシステムがないと、一時停止および再開の機能が制限され、一時停止またはシャットダウンする前に、サーバーがリクエストの完了を待機しません。この機能が必要ない場合は、request-controller サブシステムを削除すると、パフォーマンスを若干向上できます。

2.3.1. サーバーの一時停止

JBoss EAP 8.0 は、サーバーの操作を正常に一時停止する suspend モードを備えています。このモードでは、アクティブなリクエストがすべて正常に完了されますが、新しいリクエストは許可されません。サーバーが中断されたら、シャットダウンすることができます。 さらに、元の実行状態に戻ったり、中断状態のままメンテナンスを実行することができます。

注記

サーバーの一時停止によって管理インターフェイスが影響を受けることはありません。

管理コンソールまたは管理 CLI を使用するとサーバーを一時停止および再開できます。

サーバーの一時停止状態のチェック

以下の管理 CLI コマンドを使用するとサーバーの中断状態を表示できます。結果の値は、RUNNINGPRE_SUSPENDSUSPENDING、または SUSPENDED のいずれかになります。

  • スタンドアロンサーバーの中断状態をチェックします。

    :read-attribute(name=suspend-state)
  • マネージドドメインのサーバーの中断状態をチェックします。

    /host=primary/server=server-one:read-attribute(name=suspend-state)

中断

アクティブなリクエストが完了するまでサーバーが待機するタイムアウト値を秒単位で指定し、以下の管理 CLI コマンドを使用してサーバーを中断します。デフォルト値は 0 で、即座に中断します。-1 を値として指定すると、サーバーはアクティブなリクエストがすべて完了するまで無期限に待機します。

以下の各例は、リクエストが完了するまで最大 60 秒待機した後、一時停止します。

  • スタンドアロンサーバーを一時停止します。

    :suspend(suspend-timeout=60)
  • マネージドドメインのすべてのサーバーを一時停止します。

    :suspend-servers(suspend-timeout=60)
  • マネージドドメインの単一のサーバーを一時停止します。

    /host=primary/server-config=server-one:suspend(suspend-timeout=60)
  • サーバーグループのすべてのサーバーを一時停止します。

    /server-group=main-server-group:suspend-servers(suspend-timeout=60)
  • 特定のホストコントローラーによって管理されているサーバーをすべて一時停止します。

    /host=primary:suspend-servers(suspend-timeout=60)

再開

resume コマンドは、新しいリクエストを受け入れるために、サーバーを通常の実行状態に戻します。ホスト、サーバー、サーバーグループ、またはドメインレベルでコマンドを起動できます。以下に例を示します。

:resume

サーバーを一時停止状態で起動

サーバーを一時停止状態で起動し、サーバーが再開するまでリクエストを受け入れないようにすることができます。

  • スタンドアロンサーバーを一時停止状態で起動するには、JBoss EAP インスタンスの起動時に --start-mode=suspend ランタイム引数を使用します。

    $ EAP_HOME/bin/standalone.sh --start-mode=suspend
  • マネージドドメインサーバーを一時停止モードで起動するには、管理 CLI コマンドで start-mode=suspend 引数を start 操作に渡します。

    /host=HOST_NAME/server-config=SERVER_NAME:start(start-mode=suspend)
    注記

    start-mode 引数をサーバーの reload および restart 操作に渡すこともできます。

  • マネージドドメインサーバーグループのすべてのサーバーを一時停止モードで起動するには、管理 CLI コマンドで start-mode=suspend 引数を start-servers 操作に渡します。

    /server-group=SERVER_GROUP_NAME:start-servers(start-mode=suspend)
    注記

    start-mode 引数をサーバーグループの reload-servers および restart-servers 操作に渡すこともできます。

2.3.2. 管理 CLI を使用したサーバーの正常なシャットダウン

サーバーの停止時に適切なタイムアウト値を指定すると、サーバーは正常にシャットダウンされます。コマンドを実行するとサーバーが一時停止され、すべてのリクエストが完了するまで最大で指定のタイムアウトの期間待機し、その後シャットダウンします。

以下の管理 CLI コマンドを使用してサーバーを正常にシャットダウンします。アクティブなリクエストが完了するまでサーバーが待機するタイムアウト値を秒単位で指定します。デフォルトは 0 で、サーバーを即座にシャットダウンします。-1 を値として指定すると、アクティブなリクエストがすべて完了するまで無期限に待機した後、シャットダウンします。

以下の各例は、リクエストが完了するまで最大 60 秒待機した後、シャットダウンします。

  • スタンドアロンサーバーを正常にシャットダウンします。

    shutdown --suspend-timeout=60
  • マネージドドメインのすべてのサーバーを停止します。

    :stop-servers(suspend-timeout=60)
  • マネージドドメインの単一のサーバーを停止します。

    /host=primary/server-config=server-one:stop(suspend-timeout=60)
  • サーバーグループのすべてのサーバーを正常に停止します。

    /server-group=main-server-group:stop-servers(suspend-timeout=60)
  • ホストコントローラーとそれが管理するサーバーをすべてシャットダウンします。

    /host=primary:shutdown(suspend-timeout=60)

suspend-timeout 属性は、ホストコントローラー自体ではなく、ホストコントローラーが管理するサーバーにのみ適用されます。

OS シグナルを使用したサーバーの正常なシャットダウン

org.wildfly.sigterm.suspend.timeout システムプロパティーを設定し、kill -15 PID などの OS TERM シグナルを送信することで、サーバーを正常にシャットダウンできます。デフォルトでは、この動作は管理 CLI の shutdown --suspend-timeout=0 コマンドと同じであるため、現在処理中のリクエストを即座に終了できます。org.wildfly.sigterm.suspend.timeout システムプロパティーでタイムアウトを設定できます。このプロパティーは、サーバーのシャットダウン前にリクエストの完了を待機する最大秒数を示します。-1 を値として指定すると、サーバーは永久に待機します。

重要

マネージドドメインでは、OS シグナルを使用してサーバーをシャットダウンしないでください。代わりに、管理ホストコントローラーから 管理 CLI または管理コンソールを使用してサーバーをシャットダウン する必要があります。

JVM がシグナル処理を無効にするように設定されている場合 (JVM オプションに -Xrs java 引数が渡される場合など)、または送信されたシグナルがプロセスが応答できるものではない場合 (KILL シグナルが送信された場合など)、OS シグナルを使用した正常なシャットダウンは機能しません。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.