JBoss EAP 6/7 で jboss.as.management.blocking.timeout を設定する
Environment
- Red Hat JBoss Enterprise Application Platform (EAP)
- 6.3 以降
- 7
Issue
- デプロイメントにより、デプロイメントフォルダーに ".deployment" ファイルではなく ".failed" ファイルが生成されます。
- スレーブサーバーが起動せず、マスターのログにエラーが記録されます。
- サービスコンテナーの安定を待つ操作がタイムアウトになります。
-
起動時に java.util.concurrent.TimeoutException エラーが発生します。
-
JBoss EAP 7 の場合 (タイムアウト秒数と操作の詳細は異なる場合があります)
ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0348: Timeout after [300] seconds waiting for service container stability. Operation will roll back. Step that first updated the service container was 'add' at address '[
("core-service" => "management"),
("management-interface" => "http-interface")
]' -
JBoss EAP 6 の場合 (タイムアウト秒数と操作の詳細は異なる場合があります)
ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) JBAS013412: Timeout after [300] seconds waiting for service container stability. Operation will roll back. Step that first updated the service container was 'add' at address '[("interface" => "management")]'
-
-
WAR/EAR ファイルをデプロイできず、マスターサーバーがデプロイメントエラーを返します。
"WFLYDC0074: Operation failed or was rolled back on all servers. Server failures:" => {"server-group" => {"main-server-group" => {"host" => {"slave1" => {"mainserver1" => "WFLYCTL0409: Execution of operation 'deploy' on remote process at address '[
(\"host\" => \"slave1\"),
(\"server\" => \"mainserver1\")
]' timed out after 305000 ms while awaiting initial response; remote process has been notified to terminate operation"}}}}}},
"rolled-back" => true,
"server-groups" => {"cbx-server-group" => {"host" => {"slave1" => {"mainserver1" => {"response" => {
"outcome" => "failed",
"result" => undefined,
"failure-description" => "WFLYCTL0409: Execution of operation 'deploy' on remote process at address '[
(\"host\" => \"slave1\"),
(\"server\" => \"mainserver1\")
]' timed out after 305000 ms while awaiting initial response; remote process has been notified to terminate operation",
"rolled-back" => true
}}}}}} -
Bugzilla 1117945 は修正されましたか?
Resolution
jboss.as.management.blocking.timeout
を system property
として設定し、サービスコンテナーの安定性を待機する際のタイムアウト (秒) を調整します。デフォルトは 300 秒です。
さまざまな操作モードで JBoss EAP のシステムプロパティーを設定する方法については、ソリューション Add/remove/update system properties in JBoss EAP 6/7 を参照してください。
スタンドアロンモード では、CLI コマンド /system-property=jboss.as.management.blocking.timeout:add (value=N)
を使用します。この場合の N は設定する値です。例:
[standalone@localhost:9990 /] /system-property=jboss.as.management.blocking.timeout:add(value=600)
{"outcome" => "success"}
これは、設定ファイル standalone.xml
に次のように記述されます。
</extensions>
<system-properties>
<property name="jboss.as.management.blocking.timeout" value="600"/>
</system-properties>
<management>
standalone.conf
で設定するか、コマンドラインのシステムプロパティーを使用して JBoss EAP を直接実行することも可能です。
./bin/standalone.sh -Djboss.as.management.blocking.timeout=600
ドメインモード では、サーバーごとにこれを設定する必要があります。
/host=master/server-config=server-one/system-property=jboss.as.management.blocking.timeout:add(boot-time=true,value=600)
さらに、ドメインコントローラー (マスターおよびリモートスレーブコントローラー) に設定します。
-
コマンドライン
- Red Hat Enterprise Linux:
bin/domain.sh -Djboss.as.management.blocking.timeout=600
- Microsoft Windows:
bin\domain.bat -Djboss.as.management.blocking.timeout=600
- Red Hat Enterprise Linux:
-
サービス起動用の設定ファイル
-
domain.conf
PROCESS_CONTROLLER_JAVA_OPTS="$PROCESS_CONTROLLER_JAVA_OPTS -Djboss.as.management.blocking.timeout=600"
...
HOST_CONTROLLER_JAVA_OPTS="$HOST_CONTROLLER_JAVA_OPTS -Djboss.as.management.blocking.timeout=600" -
domain.bat
を編集します。"%JAVA%" %PROCESS_CONTROLLER_JAVA_OPTS% ^
"-Dorg.jboss.boot.log.file=%JBOSS_LOG_DIR%\process-controller.log" ^
"-Dlogging.configuration=file:%JBOSS_CONFIG_DIR%/logging.properties" ^
-jar "%JBOSS_HOME%\jboss-modules.jar" ^
%MODULE_OPTS% ^
-mp "%JBOSS_MODULEPATH%" ^
org.jboss.as.process-controller ^
-jboss-home "%JBOSS_HOME%" ^
-jvm "%JAVA%" ^
%MODULE_OPTS% ^
-mp "%JBOSS_MODULEPATH%" ^
-- ^
"-Dorg.jboss.boot.log.file=%JBOSS_LOG_DIR%\host-controller.log" ^
"-Dlogging.configuration=file:%JBOSS_CONFIG_DIR%/logging.properties" ^
%HOST_CONTROLLER_JAVA_OPTS% ^
-- ^
-default-jvm "%JAVA%" ^
-Djboss.as.management.blocking.timeout=600 ^
%*
-
注記
- サーバーグループまたは個々のドメインサーバーレベルでプロパティーを設定する唯一のユースケースは、ユーザーがホストコントローラーで設定したタイムアウトよりも 小さい タイムアウトを必要とする場合です。
- 値の範囲は 1 - 2147483 秒で、値を 0 に設定するとメッセージがログに記録され、300 秒に設定されます。
Root Cause
org.jboss.as.controller.BlockingTimeout
クラスは、システムプロパティー jboss.as.management.blocking.timeout
の値をロードするか、デフォルトの 300 (秒) に設定します。
このプロパティーは、デプロイメントごとのタイムアウト ではなく コンテナーの安定性に関するタイムアウト として使用され、起動 中に jboss.as.management.blocking.timeout
に到達すると、すべてのアプリケーションがアンデプロイされ、コンテナーがシャットダウンされます。
この背後には、ユーザーが重大な障害に気づかない可能性があるため、中途半端に稼働しているサーバーの存在は潜在的に危険であるという理由があります。
Diagnostic Steps
-
ウイルススキャナーがサーバーにインストールされ、アクティベートされているか確認します。
-
アプリケーションに変更を加えた後に問題が発生した場合は、動作していたときと比較して何が変更されたかを確認してください。何かアップグレードしましたか? 何か追加しましたか? 指しているのは新しいデータベースですか、それとも別の外部システムですか?
-
何がスタックしているかを Red Hat が確認できるよう、起動中に一連の スレッドダンプ を収集します。JBoss EAP 7.4.8 以降を使用している場合、スレッドダンプは自動的に
server.log
に記録されます。この機能拡張は、JBEAP-23951 で実装されました。 -
この設定を、ドメインコントローラーとスレーブホストコントローラーの
domain.conf
に必ず追加してください。
ユーザーがスレッドダンプを収集すると、Red Hat はそれを分析して、デプロイメントを妨げているデッドロックやスレッドが待機しているリソースがないか確認できます。
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments