第16章 JVM

16.1. JVM

16.1.1. JVM 設定

Java Virtual Machine (JVM) の設定は、管理対象ドメインインスタンスとスタンドアロンサーバーインスタンスでは異なります。管理対象ドメインでは、JVM 設定が host.xml および domain.xml 設定ファイルで宣言され、サーバープロセスを起動および停止するドメインコントローラーコンポーネントにより決定されます。スタンドアロンサーバーインスタンスでは、サーバー起動プロセスで起動時にコマンドライン設定を渡すことができます。これらは、管理コンソールのコマンドラインまたは System Properties 画面で宣言できます。
管理対象ドメイン

管理対象ドメインの重要な機能は、JVM 設定を複数のレベルで定義できることです。サーバーグループまたはサーバーインスタンスによって、ホストレベルでカスタム JVM 設定を指定できます。特別な子要素は親設定よりも優先され、グループまたはホストレベルで除外せずに特定のサーバー設定を宣言できます。これにより、設定が設定ファイルで宣言されるか、実行時に渡されるまで、親設定は他のレベルで継承できます。

例16.1 ドメイン設定ファイルの JVM 設定

以下の例は、domain.xml 設定ファイルの、サーバーグループに対する JVM 宣言を示しています。
<server-groups>
       <server-group name="main-server-group" profile="default">
           <jvm name="default">
               <heap size="64m" max-size="512m"/>
           </jvm>
           <socket-binding-group ref="standard-sockets"/>
       </server-group>
       <server-group name="other-server-group" profile="default">
           <jvm name="default">
               <heap size="64m" max-size="512m"/>
           </jvm>
           <socket-binding-group ref="standard-sockets"/>
       </server-group>
</server-groups>
このインスタンスでは、main-server-group という名前のサーバーグループが 64 メガバイトのヒープサイズと 512 メガバイトの最大ヒープサイズを宣言しています。このグループに属するすべてのサーバーは、これらの設定を継承します。これらの設定は、グループ全体、ホスト、または個別サーバーで変更できます。

例16.2 ホスト設定ファイルのドメイン設定

以下の例は、host.xml 設定ファイルの、サーバーグループに対する JVM 宣言を示しています。
<servers>
  <server name="server-one" group="main-server-group" auto-start="true">
    <jvm name="default"/>
  </server>
  <server name="server-two" group="main-server-group" auto-start="true">
    <jvm name="default">
      <heap size="64m" max-size="256m"/>
    </jvm>
    <socket-bindings port-offset="150"/>
  </server>
  <server name="server-three" group="other-server-group" auto-start="false">
    <socket-bindings port-offset="250"/>
  </server>
</servers>
このインスタンスでは、server-two という名前のサーバーが、main-server-group という名前のサーバーグループに属し、default JVM グループから JVM 設定を継承します。前の例では、main-server-group のメインヒープサイズは 512 メガバイトに設定されていました。これよりも小さい 256 メガバイトを最大ヒープサイズとして宣言すると、server-twodomain.xml 設定よりも優先され、必要に応じてパフォーマンスを微調整できます。
実行時のスタンドアロンサーバー設定

スタンドアロンサーバーインスタンスの JVM 設定を実行時に宣言するには、サーバーを起動する前に JAVA_OPTS 環境変数を設定します。以下は Linux のコマンドラインで JAVA_OPTS 環境変数を設定する一例です。

[user@host bin]$ export JAVA_OPTS="-Xmx1024M"
次のように、同じ設定を Microsoft Windows 環境で使用できます。
C:\> set JAVA_OPTS="Xmx1024M"
JVM に渡すオプションの例が格納されている EAP_HOME/bin フォルダーにある standalone.conf ファイルに JVM 設定を追加することも可能です。

警告

JAVA_OPTS 環境変数を設定すると、JAVA_OPTS 環境変数のデフォルト値が再定義されます。これにより、JBoss EAP の起動が阻止される可能性があります。

16.1.2. 管理コンソールでの JVM 状態の表示

スタンドアロンサーバーまたは管理対象ドメインに対し、Java 仮想マシン (JVM) の状態を管理コンソールに表示することができます。コンソールにはヒープ使用量、非ヒープ使用量、およびサーバーのスレッド使用量が表示されます。統計はリアルタイムで表示されませんが、コンソールの表示を更新すると最新の JMV リソースの概要が表示されます。
JVM の状態には次の値が表示されます。

表16.1 JVM 状態属性

タイプ説明
Maxメモリー管理に使用できる最大メモリー容量。使用可能な最大メモリー容量は薄い灰色のバーで表示されます。
Used使用中のメモリー容量。使用中のメモリー容量は濃い灰色のバーで表示されます。
CommittedJava 仮想マシンが使用するために確保されたメモリー容量。確保されたメモリーは濃い灰色で表示されます。
Initメモリー管理のために Java 仮想マシンが最初にオペレーティングシステムからリクエストするメモリー容量。これは濃い灰色のバーで表示されます。

手順16.1 管理コンソールでの JVM 状態の表示

    • スタンドアロンサーバーインスタンスの JVM 状態 の表示

      画面の上部から Runtime タブを選択します。Status メニューを展開したら Platform メニューを展開します。JVM を選択します。
    • 管理対象ドメインの JVM 状態の表示

      画面の上部から Runtime タブを選択します。Server Status メニューを展開したら Platform メニューを展開します。JVM を選択します。
  1. 管理対象ドメインはサーバーグループのすべてのサーバーインスタンスを表示できますが、サーバーメニューから選択した 1 つのサーバーのみを一度に表示できます。サーバーグループの他のサーバーの状態を表示するには、画面の左にある Change Server をクリックしてグループに表示されるホストとサーバーから選択します。必要なサーバーまたはホストを選択すると、JVM の詳細が変更されます。Close をクリックして終了します。
結果

サーバーインスタンスに対する JVM 設定の状態が表示されます。

16.1.3. JVM の設定

<jvm></jvm> タグは、<option value="VALUE"/> タグを使用して JVM 設定にパラメーターを追加するために使用できる <jvm-options></jvm-options> の使用をサポートします。

例16.3 <jvm-options> の使用

<jvm name="default">
  <heap size="1303m" max-size="1303m"/>
  <permgen max-size="256m"/>
  <jvm-options>
    <option value="-XX:+UseCompressedOops"/>
  </jvm-options>
</jvm>
CLI を使用した JVM の設定

CLI を使用して JVM を設定するには、以下の構文を使用します。

# cd /server-group=main-server-group/jvm=default

# :add-jvm-option(jvm-option="-XX:+UseCompressedOops")
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => {"main-server-group" => {"host" => {"master" => {
        "server-one" => {"response" => {
            "outcome" => "success",
            "response-headers" => {
                "operation-requires-restart" => true,
                "process-state" => "restart-required"
            }
        }},
        "server-two" => {"response" => {
            "outcome" => "success",
            "response-headers" => {
                "operation-requires-restart" => true,
                "process-state" => "restart-required"
            }
        }}
    }}}}
}

# :read-resource

# Expected Result:

[domain@localhost:9999 jvm=default] :read-resource                                      
  {
    "outcome" => "success",
    "result" => {
    "agent-lib" => undefined,
    "agent-path" => undefined,
    "env-classpath-ignored" => undefined,
    "environment-variables" => undefined,
    "heap-size" => "1303m",
    "java-agent" => undefined,
    "java-home" => undefined,
    "jvm-options" => ["-XX:+UseCompressedOops"],
    "max-heap-size" => "1303m",
    "max-permgen-size" => "256m",
    "permgen-size" => undefined,
    "stack-size" => undefined,
    "type" => undefined
  }
}

jvm-options エントリーの削除

jvm-options エントリーを削除するには、次の構文を使用します。

# cd /server-group=main-server-group/jvm=default

# :remove-jvm-option(jvm-option="-XX:+UseCompressedOops")

# Expected Result:

[domain@localhost:9999 jvm=default] :remove-jvm-option(jvm-option="-XX:+UseCompressedOops")
{
    "outcome" => "success",
    "result" => undefined,
    "server-groups" => {"main-server-group" => {"host" => {"master" => {
        "server-one" => {"response" => {
            "outcome" => "success",
            "response-headers" => {
                "operation-requires-restart" => true,
                "process-state" => "restart-required"
            }
        }},
        "server-two" => {"response" => {
            "outcome" => "success",
            "response-headers" => {
                "operation-requires-restart" => true,
                "process-state" => "restart-required"
            }
        }}
    }}}}
}