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 を初期化する必要があります。次のパラメータを実行します。

CODE
JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,com.singularity"

JVM を初期化しない場合、インストールで「class not found」例外が生成されます。

プロパティ jjboss.modules.system.pkgs が環境で使用可能であることを確認します。プロパティが存在する場合は、 com.singularity を追加します。

例:

CODE
-Djboss.modules.system.pkgs=org.jboss.byteman,com.singularity

このプロパティが存在しない場合は、新しいプロパティを設定します。

CODE
-Djboss.modules.system.pkgs=com.singularity

スタンドアロンモードエージェントのインストール

これらの手順は、Red Hat JBoss の使用を前提としています。サポート対象バージョンについては、「アプリケーションサーバー」を参照してください。

JBossスタンドアロンにJavaエージェントをインストールする方法:
Linux
  1. bin/standalone.sh ファイルを開く。

  2. ファイルで次の javaagent 引数を追加する。

    CODE
    export JAVA_OPTS="$JAVA_OPTS -javaagent:/agent_install_dir/javaagent.jar"
  3. 引数を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\" \
  4. アプリケーションサーバーを再起動する。

  5. JAVA_OPTSセクションのstandalone.confファイルの最後に次を追加する。JAVA_OPTS

    JSON
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:{{}} <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar

    JDK9 以降では、 -Xbootclasspath/p オプションは削除されました。代わりに -Xbootclasspath/a を使用してください。

    CODE
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a: <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar
  6. <path_to_jboss_logmanager><version> をシステムのパスおよびログマネージャ JAR ファイル名で置き換える。パスを動的にする方法については、「LogManager の場所を動的にする」を参照。動的な LogManager の場所

    注: ステップ 5 とステップ 6 は、ログマネージャのエラーが発生した場合にのみ必須です。また、この変更後にステップ 4 を繰り返します。
Windows
  1. standalone.shファイルで次のjavaagent引数を追加する。

    CODE
    set JAVA_OPTS=%JAVA_OPTS% -javaagent:\agent_install_dir\javaagent.jar
  2. 引数を の次のセクションの上に置く。

    CODE
    RESTART
    "%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%
  3. アプリケーションサーバーを再起動する。

  4. JAVA_OPTSセクションのstandalone.confファイルの最後に次を追加する。JAVA_OPTS

    JSON
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:{{}} <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar

    JDK9 以降では、 -Xbootclasspath/p オプションは削除されました。代わりに -Xbootclasspath/a を使用してください。

    CODE
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a: <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar
  5. <path_to_jboss_logmanager><version> をシステムのパスおよびログマネージャ JAR ファイル名で置き換える。パスを動的にする方法については、「LogManager の場所を動的にする」を参照。動的な LogManager の場所

    注: ステップ 4 とステップ 5 は、ログマネージャのエラーが発生した場合にのみ必須です。また、この変更後にステップ 3 を繰り返します。

動的な LogManager の場所

スタンドアロン JBoss インスタンスでは、パスおよびログマネージャ JAR 名をハードコーディングするのではなく、glob パターンマッチング技術を使ってログマネージャファイルへのパスを動的にすることで、システム間の変更や差異に対する回復機能を持たせることができます。

これを実行する正確な手順は、環境によって異なります。次のセクションでは、独自の実装を開始する場合の、Windows システムと Linux システムでの構成例を示します。

Windows

Windowsの場合、standalone.conf.batにこの付加的なスニペットが追加されます。

CODE
...
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の場合、次のコードを使いパスを動的に追加できます。

JSON
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のバージョンにより異なる場合があります。ご使用のシステムを確認し、それに応じて例にあるようにパスを調整します。

Standalone Mode Agent Installation

These instructions assume the use of Red Hat JBoss. For supported versions, see Java対応環境.

To install the Java Agent on JBoss Standalone (Linux)

To install the Java Agent on JBoss Standalone:
  1. Open the bin/standalone.sh file.
  2. Add the following javaagent argument:
    CODE
    export JAVA_OPTS="$JAVA_OPTS -javaagent:/agent_install_dir/javaagent.jar"
  3. Specify the argument above the following section of 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\" \
  4. Restart the application server.
  5. Add the following to the end of the standalone.conf file in the JAVA_OPTS section:
    JSON
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:{{}}
    <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar
    For JDK9 and above, -Xbootclasspath/p option has been removed; use -Xbootclasspath/a instead:
    CODE
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a:<path_to_jboss_logmanager>/jboss-logmanager-<version>.jar
  6. Replace <path_to_jboss_logmanager> and <version> with the path and log manager JAR filename for your system.
    See Making the LogManager Location Dynamic for information on making the path dynamic.
    注: Step 5 and Step 6 are required only if the log manager errors manifest. Also, repeat Step 4 after this change.

To install the Java Agent on JBoss Standalone (Windows)

To install the Java Agent on JBoss Standalone:
  1. In the standalone.bat file, add the following javaagent argument.
    CODE
    set JAVA_OPTS=%JAVA_OPTS% -javaagent:\agent_install_dir\javaagent.jar
  2. Specify the argument above the following section of standalone.sh:
    CODE
    RESTART
    "%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%
  3. Restart the application server.
  4. Add the following to the end of the standalone.conf file in the JAVA_OPTS section:
    JSON
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/p:{{}}
    <path_to_jboss_logmanager>\jboss-logmanager-<version>.jar
    For JDK9 and above, -Xbootclasspath/p option has been removed; use -Xbootclasspath/a instead:
    CODE
    -Djava.util.logging.manager=org.jboss.logmanager.LogManager -Xbootclasspath/a:
    <path_to_jboss_logmanager>/jboss-logmanager-<version>.jar
  5. Replace <path_to_jboss_logmanager> and <version> with the path and log manager JAR filename for your system.
    See Making the LogManager Location Dynamic for information on making the path dynamic.
    注: Step 4 and Step 5 are required only if the log manager errors manifest. Also, repeat Step 3 after this change.
Dynamic LogManager Location

On standalone JBoss instances, instead of hard coding the path and name of the log manager JAR, you can use glob pattern matching techniques to make the path to the log manager file dynamic, so that it is resilient to change or variances among systems.

The exact steps to accomplish this varies by environment. These sections provide an example of this configuration on Windows and Linux systems, and are meant as a starting point for your own implementation.

Windows

In Windows, the standalone.conf.bat gets this additional snippet:

CODE
...
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%

The path to the LogManager JAR file under the JBoss home can vary by JBoss version. Be sure to check your system and adjust the path as shown in the example accordingly.

Linux

In Linux, you can populate the path dynamically with the following code:

JSON
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)"

If using the ${JBOSS_HOME} variable, as in the example, be sure to set the variable to the directory to the JBoss installation directory on your system.

The path to the LogManager JAR file under the JBoss home can vary by JBoss version. Be sure to check your system and adjust the path as shown in the example accordingly.

ドメインモードエージェントのインストール

ドメインモードの場合、設定を構成する場所はご使用の環境の性質により異なります。ドメインは以下のもので構成されています。
  • ドメインコントローラ(管理および構成サーバー)。domain.xml 構成ファイルは、管理対象ホストのグローバル構成です。
  • ホストコントローラ(1 つまたは複数のアプリケーション サーバ ノードを持つ特定のホストを管理します)。ホストコントローラとノードの数に制限はありません。hosts.xml ファイルには、そのホストマシン上にあるノードの設定が含まれます。ホストマシン

したがって、構成を配置する場所は次のように異なります。

  • domain.xml:管理対象ドメイン内のすべてのホストで同一である可能性のある(つまり、ログマネージャとエージェントのファイルがすべてのマシン上の同じ場所にある)設定は、ドメインコントローラの domain.xml ファイルに移動できます。
  • host.xml:ホストごとに特殊化する必要がある設定(たとえば、ホスト上の関連ファイルへのパスが異なる場合)は、host.xml ファイルに移動する必要があります。

構成設定は、グローバルであるのか、ホスト固有であるのかに応じて、domain.xmlhost.xml の両方に追加できます。次のセクションでは、一般的な設定をドメイン構成に追加し、ノード名の設定をホスト構成に追加する例を示します。

Domain.xmlの構成
  1. ドメイン用に domain.xml を探し編集する。
    このファイルは通常$JBOSS_HOME/domain/configuration/にあります。
  2. system-properties エレメントを見つけ、既存のシステムプロパティに com.singularity の値を持つ jboss.modules.system.pkgs という名のプロパティを追加する。
    例:
    CODE
    <system-properties>
            <!-- IPv4 is not required, but setting this helps avoid unintended use of IPv6 -->
            <property name="java.net.preferIPv4Stack" value="true"/>
            <property name="jboss.modules.system.pkgs" value="com.singularity"/>
    </system-properties>
    このプロパティは、JBossクラスローダーにAppDynamicsパッケージをロードするよう指示します。これは Java エージェントを実行するのに必須です。

    プロパティ jjboss.modules.system.pkgs が環境で使用可能であることを確認します。プロパティが存在する場合は、 com.singularity を追加します。

    例:
    CODE
    -Djboss.modules.system.pkgs=org.jboss.byteman,com.singularity
    このプロパティが存在しない場合は、新しいプロパティを設定します。
    CODE
    -Djboss.modules.system.pkgs=com.singularity
  3. エージェントを有効にするサーバーグループ名の下に、エージェントの位置、JBossアプリケーション名、ティア名に適切な値を使いJVMオプションを追加する。
    CODE
    <server-group name="main-server-group" profile="full">
        <jvm name="default">
             <heap size="1303m" max-size="1303m"/>
             <permgen max-size="256m"/>
             <jvm-options>
                <option value="-javaagent:<agent_install_dir>/javaagent.jar"/> 
                <option value="-Dappdynamics.agent.applicationName=JBOSS-EAP-APP"/>
                <option value="-Dappdynamics.agent.tierName=JBOSS-EAP-TIER"/>
             </jvm-options>
        </jvm>
        <socket-binding-group ref="full-sockets"/>
     </server-group>
    domain.xml ファイルの変更を有効にするには、管理ホストを再起動する必要があります。変更をサーバーホストに反映させるには、それらも再起動する必要があります。
Host.xmlの構成

ホストごとに、(通常は$JBOSS_HOME/domain/configuration/に配置されている)host.xmlファイルでAppDynamicsノード名を指定します。Splunk AppDynamicshost.xml

このインスタンスのノード名を指定するには、-Dappdynamics.agent.nodeName JVM オプションを追加します。

CODE
<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 処理情報を表示します。このコマンドは、起動の試行中(ただし失敗する前)に実行する必要があります。

CODE
ps -ef | grep [o]rg.jbossas | tr ' ' '\n' | sed -e '/^$/d'

JBossのシャットダウンに関する問題のトラブルシューティング

JBoss 5.1.2 サーバ構成で JVM の JMXremote 機能を有効にすると、/bin/shutdown.sh の呼び出し時に次のエラーが生成されます。

CODE
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 内部で使用されるという理由から、環境内には配置しないようにしてください。

環境内のパラメータをクリアするには、コンソールから次のように実行します。

  1. export JAVA_OPTS=""
  2. env|grep JAVA_OPTS

    JAVA_OPTS= <You will see this message>

  3. shutdown.sh -s jnp://localhost:1099 -u USER -p PASSWORD

根本原因

JMX 関連のオプションは、shutdown.sh の呼び出し時に JAVA_OPTS に設定しないようにしてください。JAVA_OPTS は JBoss EAP の起動時にのみ設定され、実行時には設定されません。