JBossとWildflyのスタートアップ設定
このページでは、Red Hat JBoss Enterprise アプリケーションサーバーと JBoss Wildfly に Java エージェントをインストールする方法について説明します。
インストールする前に
JBoss または Wildfly にエージェントをインストールするには、Java エージェントおよびログマネージャのパッケージをサーバ起動ルーチンに追加します。
構成されている場所は、フレームワークのバージョンによって異なります。
- Linux では、設定を standalone.conf または standalone.sh に追加しま。
- Windows では、設定を
standalone.conf.batに追加します。 - JBoss 4.xまたは5.xを使用している場合は、run.sh(Linux の場合)または run.bat(Windows の場合)に設定を追加します。
JVM の初期化
JBoss EAP または JBoss Wildfly に Java エージェントをインストールするには、JVM を初期化する必要があります。次のパラメータを実行します。
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,com.singularity"
JVM を初期化しない場合、インストールで「class not found」例外が生成されます。
プロパティ jjboss.modules.system.pkgs が環境で使用可能であることを確認します。プロパティが存在する場合は、 com.singularity を追加します。
例:
-Djboss.modules.system.pkgs=org.jboss.byteman,com.singularity
このプロパティが存在しない場合は、新しいプロパティを設定します。
-Djboss.modules.system.pkgs=com.singularity
スタンドアロンモードエージェントのインストール
これらの手順は、Red Hat JBoss の使用を前提としています。サポート対象バージョンについては、「アプリケーションサーバー」を参照してください。
JBossスタンドアロンにJavaエージェントをインストールする方法:- Linux
-
-
bin/standalone.shファイルを開く。 -
ファイルで次の javaagent 引数を追加する。
CODEexport JAVA_OPTS="$JAVA_OPTS -javaagent:/agent_install_dir/javaagent.jar" -
引数をstandalone.shの次のセクションの上に置く
CODE... while true;do if [ "x$LAUNCH_JBOSS_IN_BACKGROUND" = "X" ]; then # Execute the JVM in the foreground eval \"$JAVA\" -D\"[Standalone]\"$JAVA_OPTS \ \"-Dorg.jboss.boot.log.file=$JBOSS_LOG_DIR/boot.log\" \ \"-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties\" \ -jar \"$JBOSS_HOME/jboss-modules.jar\" \ -
アプリケーションサーバーを再起動する。
-
JAVA_OPTSセクションのstandalone.confファイルの最後に次を追加する。
JAVA_OPTSJSON-Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:{{}} <path_to_jboss_logmanager>/jboss-logmanager-<version>.jarJDK9 以降では、
-Xbootclasspath/pオプションは削除されました。代わりに-Xbootclasspath/aを使用してください。CODE-Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a: <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar -
<path_to_jboss_logmanager>と<version>をシステムのパスおよびログマネージャ JAR ファイル名で置き換える。パスを動的にする方法については、「LogManager の場所を動的にする」を参照。動的な LogManager の場所注: ステップ 5 とステップ 6 は、ログマネージャのエラーが発生した場合にのみ必須です。また、この変更後にステップ 4 を繰り返します。
-
- Windows
-
-
standalone.shファイルで次のjavaagent引数を追加する。
CODEset JAVA_OPTS=%JAVA_OPTS% -javaagent:\agent_install_dir\javaagent.jar -
引数を の次のセクションの上に置く。
CODERESTART "%JAVA%" %JAVA_OPTS% ^ "-Dorg.jboss.boot.log.file=%JBOSS_LOG_DIR%\server.log" ^ "-Dlogging.configuration=file:%JBOSS_CONFIG_DIR%/logging.properties" ^ -jar "%JBOSS_HOME%\jboss-modules.jar" ^ -mp "%JBOSS_MODULEPATH%" ^ -jaxpmodule "javax.xml.jaxp-provider" ^ org.jboss.as.standalone ^ "-Djboss.home.dir=%JBOSS_HOME%" ^ %SERVER_OPTS% -
アプリケーションサーバーを再起動する。
-
JAVA_OPTSセクションのstandalone.confファイルの最後に次を追加する。
JAVA_OPTSJSON-Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:{{}} <path_to_jboss_logmanager>/jboss-logmanager-<version>.jarJDK9 以降では、
-Xbootclasspath/pオプションは削除されました。代わりに-Xbootclasspath/aを使用してください。CODE-Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a: <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar -
<path_to_jboss_logmanager>と<version>をシステムのパスおよびログマネージャ JAR ファイル名で置き換える。パスを動的にする方法については、「LogManager の場所を動的にする」を参照。動的な LogManager の場所注: ステップ 4 とステップ 5 は、ログマネージャのエラーが発生した場合にのみ必須です。また、この変更後にステップ 3 を繰り返します。
-
動的な LogManager の場所
スタンドアロン JBoss インスタンスでは、パスおよびログマネージャ JAR 名をハードコーディングするのではなく、glob パターンマッチング技術を使ってログマネージャファイルへのパスを動的にすることで、システム間の変更や差異に対する回復機能を持たせることができます。
これを実行する正確な手順は、環境によって異なります。次のセクションでは、独自の実装を開始する場合の、Windows システムと Linux システムでの構成例を示します。
Windows
Windowsの場合、standalone.conf.batにこの付加的なスニペットが追加されます。
...
rem jboss.modules.system.pkgs
set JAVA_OPTS=%JAVA_OPTS% -Djboss.modules.system.pkgs=org.jboss.byteman,com.singularity,org.jboss.logmanager
rem java.util.logging
set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.jboss.logmanager.LogManager
rem bootclasspath
set LOGMANAGER=
for /f %%i in ('dir /b "%JBOSS_HOME%\modules\system\layers\base\org\jboss\logmanager\main\jboss-logmanager-*.jar"') do (
set LOGMANAGER_JAR=%JBOSS_HOME%\modules\system\layers\base\org\jboss\logmanager\main\%%i
)
set JAVA_OPTS=%JAVA_OPTS% -Xbootclasspath/p:%LOGMANAGER_JAR%
JBossホーム下のLogManager JARファイルへのパスはJBossのバージョンにより異なる場合があります。ご使用のシステムを確認し、それに応じて例にあるようにパスを調整します。
Linux
Linuxの場合、次のコードを使いパスを動的に追加できます。
JBOSS_MODULES_SYSTEM_PKGS ="org.jboss.byteman,com.singularity,org.jboss.logmanager"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$(ls ${JBOSS_HOME}/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-*.jar)"
例にあるように ${JBOSS_HOME} 変数を使用する場合、ディレクトリへの変数をご利用のシステムの JBoss インストールディレクトリに設定します。
JBossホーム下のLogManager JARファイルへのパスはJBossのバージョンにより異なる場合があります。ご使用のシステムを確認し、それに応じて例にあるようにパスを調整します。
スタンドアロンモードエージェントのインストール
これらの手順は、Red Hat JBoss の使用を前提としています。サポートされているバージョンについては、 「Java対応環境」を参照してください。
JBoss スタンドアロンに Java エージェントをインストールする方法(Linux)
JBoss スタンドアロンに Java エージェントをインストールする方法(Windows)
スタンドアロン JBoss インスタンスでは、パスおよびログマネージャ JAR 名をハードコーディングするのではなく、glob パターンマッチング技術を使ってログマネージャファイルへのパスを動的にすることで、システム間の変更や差異に対する回復機能を持たせることができます。
これを実行する正確な手順は、環境によって異なります。次のセクションでは、独自の実装を開始する場合の、Windows システムと Linux システムでの構成例を示します。
WindowsWindowsの場合、standalone.conf.batにこの付加的なスニペットが追加されます。
...
rem jboss.modules.system.pkgs
set JAVA_OPTS=%JAVA_OPTS% -Djboss.modules.system.pkgs=org.jboss.byteman,com.singularity,org.jboss.logmanager
rem java.util.logging
set JAVA_OPTS=%JAVA_OPTS% -Djava.util.logging.manager=org.jboss.logmanager.LogManager
rem bootclasspath
set LOGMANAGER=
for /f %%i in ('dir /b "%JBOSS_HOME%\modules\system\layers\base\org\jboss\logmanager\main\jboss-logmanager-*.jar"') do (
set LOGMANAGER_JAR=%JBOSS_HOME%\modules\system\layers\base\org\jboss\logmanager\main\%%i
)
set JAVA_OPTS=%JAVA_OPTS% -Xbootclasspath/p:%LOGMANAGER_JAR%
JBossホーム下のLogManager JARファイルへのパスはJBossのバージョンにより異なる場合があります。ご使用のシステムを確認し、それに応じて例にあるようにパスを調整します。
LinuxLinuxの場合、次のコードを使いパスを動的に追加できます。
JBOSS_MODULES_SYSTEM_PKGS ="org.jboss.byteman,com.singularity,org.jboss.logmanager"
JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:$(ls ${JBOSS_HOME}/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-*.jar)"
例にあるように ${JBOSS_HOME} 変数を使用する場合、ディレクトリへの変数をご利用のシステムの JBoss インストールディレクトリに設定します。
JBossホーム下のLogManager JARファイルへのパスはJBossのバージョンにより異なる場合があります。ご使用のシステムを確認し、それに応じて例にあるようにパスを調整します。
ドメインモードエージェントのインストール
- ドメインコントローラ(管理および構成サーバー)。domain.xml 構成ファイルは、管理対象ホストのグローバル構成です。
- ホストコントローラ(1 つまたは複数のアプリケーション サーバ ノードを持つ特定のホストを管理します)。ホストコントローラとノードの数に制限はありません。
hosts.xmlファイルには、そのホストマシン上にあるノードの設定が含まれます。
したがって、構成を配置する場所は次のように異なります。
domain.xml:管理対象ドメイン内のすべてのホストで同一である可能性のある(つまり、ログマネージャとエージェントのファイルがすべてのマシン上の同じ場所にある)設定は、ドメインコントローラの domain.xml ファイルに移動できます。host.xml:ホストごとに特殊化する必要がある設定(たとえば、ホスト上の関連ファイルへのパスが異なる場合)は、host.xmlファイルに移動する必要があります。
構成設定は、グローバルであるのか、ホスト固有であるのかに応じて、domain.xml と host.xml の両方に追加できます。次のセクションでは、一般的な設定をドメイン構成に追加し、ノード名の設定をホスト構成に追加する例を示します。
ホストごとに、(通常は$JBOSS_HOME/domain/configuration/に配置されている)host.xmlファイルでAppDynamicsノード名を指定します。Splunk AppDynamicshost.xml
このインスタンスのノード名を指定するには、-Dappdynamics.agent.nodeName JVM オプションを追加します。
<servers>
<server name="server-one" group="main-server-group">
<jvm name="default">
<jvm-options>
<option value="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"/>
<option value="-Dappdynamics.agent.nodeName=JBOSS-EAP-NODE-1"/>
</jvm-options>
</jvm>
</server>
<server name="server-two" group="main-server-group" auto-start="true">
<socket-bindings port-offset="150"/>
<jvm name="default">
<jvm-options>
<option value="-Dappdynamics.agent.nodeName=JBOSS-EAP-NODE-2"/>
</jvm-options>
</jvm>
</server>
<server name="server-three" group="other-server-group" auto-start="false">
<socket-bindings port-offset="250"/>
</server>
</servers>
簡潔にするために、サンプルからコメントが削除されています。
JBossスタートアップに関する問題のトラブルシューティング
JBossにJavaエージェントをインストールする際に起こる問題のほとんどは、起動引数の競合によるものです。つまり、Javaエージェントに追加した設定が既存の引数でオーバーライドされているか、別の方法で衝突を起こしている可能性があります。このような問題は、常に簡単に検出できるとはかぎりません。
このような起動時の問題をトラブルシュートする最善の方法は、JBoss が起動を試みた時に実際に取得する起動引数を出力し検査することです。これを行うには、次のコマンドを使用して起動時に JBoss 処理情報を表示します。このコマンドは、起動の試行中(ただし失敗する前)に実行する必要があります。
ps -ef | grep [o]rg.jbossas | tr ' ' '\n' | sed -e '/^$/d'
JBossのシャットダウンに関する問題のトラブルシューティング
JBoss 5.1.2 サーバ構成で JVM の JMXremote 機能を有効にすると、/bin/shutdown.sh の呼び出し時に次のエラーが生成されます。
javax.management.JMRuntimeException: Failed to load MBeanServerBuilder class org.jboss.system.server.jmx.MBeanServerBuilderImpl:
java.lang.ClassNotFoundException: org.jboss.system.server.jmx.MBeanServerBuilderImpl
解像度
環境内に JAVA_OPTS パラメータがあるため、JVM の起動時に Java プロセスが影響を受けることがあります。JAVA_OPTS パラメータが EAP 内部で使用されるという理由から、環境内には配置しないようにしてください。
環境内のパラメータをクリアするには、コンソールから次のように実行します。
export JAVA_OPTS=""env|grep JAVA_OPTSJAVA_OPTS=<You will see this message>shutdown.sh -s jnp://localhost:1099 -u USER -p PASSWORD
根本原因
JMX 関連のオプションは、shutdown.sh の呼び出し時に JAVA_OPTS に設定しないようにしてください。JAVA_OPTS は JBoss EAP の起動時にのみ設定され、実行時には設定されません。