第14章 JVM
14.1. JVM
14.1.1. JVM 設定
host.xml
および domain.xml
設定ファイルで宣言され、サーバープロセスを起動および停止するドメインコントローラーコンポーネントによって決定されます。スタンドアロンサーバーインスタンスでは、起動時にサーバーの起動プロセスがコマンドライン設定を渡すことができます。これらはコマンドラインまたは管理コンソールの システムプロパティー画面を 使用して宣言できます。
java.util.logging.manager
などの他の JVM プロパティーには使用できません。
管理対象ドメイン
管理対象ドメインの重要な機能は、複数のレベルで JVM 設定を定義する機能です。カスタム JVM 設定は、ホストレベル、サーバーグループ、またはサーバーインスタンスにより設定できます。より特殊な子要素は親設定を上書きし、グループまたはホストレベルで除外せずに特定のサーバー設定を宣言できます。これにより、設定が設定ファイルで宣言されるか、実行時に渡されるまで、親設定を他のレベルで継承できます。
例14.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 メガバイトを宣言します。このグループに属するサーバーは、この設定を継承します。グループ全体、ホスト、または個々のサーバーの設定を変更できます。
例14.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-two
は domain.xml
設定を上書きし、必要に応じてパフォーマンスを微調整できます。
実行時のスタンドアロンサーバー設定
スタンドアロンサーバーインスタンスの JVM 設定は、サーバーを起動する前に JAVA_OPTS
環境変数を設定することでランタイム時に宣言できます。Linux コマンドラインで JAVA_OPTS
環境変数を設定する例は次のとおりです。
[user@host bin]$ export JAVA_OPTS="-Xmx1024M"
C:\> set JAVA_OPTS="Xmx1024M"
EAP_HOME/bin
フォルダーにある standalone.conf
ファイルに JVM 設定を追加することもできます。
14.1.2. 管理コンソールでの JVM 状態の表示
タイプ | 説明 |
---|---|
Max | メモリー管理に使用できるメモリーの最大量。最大エバラブメモリーは、軽量グレイのバーで表示されます。 |
Used | 使用されたメモリーの量。使用中のメモリー容量は、ダクグレーのバーで表示されます。 |
Committed | Java 仮想マシンが使用するために確保されるメモリー量。コミットされたメモリーは dark grey バーで表示されます。 |
手順14.1 管理コンソールでの JVM 状態の表示
スタンドアロンサーバーインスタンスの JVM 状態 の表示
画面の上部にあるタブを選択します。 メニューを展開し、 メニューを展開します。 を選択します。管理対象ドメインの JVM 状態の表示
画面の上部にあるタブを選択します。 メニューを展開し、 メニューを展開します。 を選択します。
- 管理対象ドメインはサーバーグループのすべてのサーバーインスタンスを表示できますが、サーバーメニューから選択すると一度に 1 つのサーバーのみを表示できます。サーバーグループ内の他のサーバーの状態を表示するには、画面の左側にあるをクリックして、グループに表示されるホストおよびサーバーから選択します。必要なサーバーまたはホストを選択し、JVM の詳細が変更されます。 をクリックして終了します。
結果
サーバーインスタンスに対する JVM 設定の状態が表示されます。
14.1.3. JVM の設定
例14.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" } }} }}}} }
32 ビットまたは 64 ビットアーキテクチャーの指定
Hewlett-Packard HP-UX および Solaris などの一部の環境では、32 ビットまたは 64 ビット JVM で実行されるかどうかを指定するために -d32
または -d64
スイッチが使用されます。指定がない場合はデフォルトで 32 ビットが使用されます。
手順14.2 スタンドアロンサーバーでの 64 ビットアーキテクチャーの指定
EAP_HOME/bin/standalone.conf
ファイルを開きます。- 以下の行を追加して、
-d64
オプションをJAVA_OPTS
に追加します。JAVA_OPTS="$JAVA_OPTS -d64"
手順14.3 管理対象ドメインでの 64 ビットアーキテクチャーの指定
- 64 ビット JVM で実行するよう、ホストおよびプロセスコントローラーを設定します。
EAP_HOME/bin/domain.conf
ファイルを開きます。- 以下の行を追加して、
-d64
オプションをJAVA_OPTS
に追加します。PROCESS_CONTROLLER_JAVA_OPTS
およびHOST_CONTROLLER_JAVA_OPTS
が設定される前に挿入されていることを確認します。JAVA_OPTS="$JAVA_OPTS -d64"
例14.4
domain.conf
の JVM オプション# # Specify options to pass to the Java VM. # if [ "x$JAVA_OPTS" = "x" ]; then JAVA_OPTS="-Xms64m -Xmx512m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true" JAVA_OPTS="$JAVA_OPTS -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS -Djava.awt.headless=true" JAVA_OPTS="$JAVA_OPTS -Djboss.modules.policy-permissions=true" JAVA_OPTS="$JAVA_OPTS -d64" else echo "JAVA_OPTS already set in environment; overriding default settings with values: $JAVA_OPTS" fi
- 64 ビット JVM で実行するよう、サーバーインスタンスを設定します。
- 適切な host.xml 設定ファイルに
-d64
を JVM オプションとして追加します。例14.5
host.xml
の JVM オプション<jvms> <jvm name="default"> <heap size="64m" max-size="256m"/> <permgen size="256m" max-size="256m"/> <jvm-options> <option value="-server"/> <option value="-d64"/> </jvm-options> </jvm> </jvms>
注記管理 CLI では以下のコマンドで、適切なホストに-d64
オプションを追加できます。/host=HOST_NAME/jvm=default:add-jvm-option(jvm-option="-d64")
14.1.4. Java Security Manager について
14.1.5. Java セキュリティーポリシー
- CodeBase
- コードの起点となる URL の場所(ホストとドメイン情報を除く)。このパラメーターは任意です。
- SignedBy
- コードの署名に秘密鍵が使用された署名者を参照するキーストアで使用されるエイリアス。これは、単一の値またはコンマ区切りの値のリストになります。このパラメーターは任意です。省略した場合には、署名の有無に関わらず、Java Security Manager には影響がありません。
- Principal
- 実行中のスレッドのプリンシパルセットに存在する必要がある
principal_type
/principal_name
ペアの一覧。Principals エントリーは任意です。これを省略すると、実行中のスレッドのプリンシパルが Java Security Manager には影響しません。 - Permissions
- パーミッションは、コードに付与されるアクセスです。多くのパーミッションは、Java Enterprise Edition 6(Java EE 6)仕様の一部として提供されます。
14.1.6. Java セキュリティーポリシーの作成
手順14.4 新しい Java Security Manager ポリシーの設定
policytool を起動します。
policytool ツールを以下のいずれかの方法で起動します。Red Hat Enterprise Linux
GUI またはコマンドプロンプトで、/usr/bin/policytool を実行します。Microsoft Windows Server
Start メニューまたは Java インストールのbin\
から policytool.exe を実行します。ロケーションは異なる場合があります。
ポリシーを作成します。
ポリシーを作成するには、を選択します。必要なパラメーターを追加してから、完了 をクリック ます。注記VFS を使用して、JBoss EAP にデプロイされたアプリケーションのパスを指定します。Linux では、パスはvfs:/content/application.war
になります。Microsoft Windows では、vfs:/${user.dir}/content/application.war
です。
以下に例を示します。grant codeBase "vfs:/content/application.war/-" { permission java.util.PropertyPermission "*", "read"; };
既存のポリシーを編集します。
既存のポリシーの一覧からポリシーを選択し、ボタンを選択します。必要に応じてパラメーターを編集します。既存のポリシーを削除します。
既存のポリシーの一覧からポリシーを選択し、ボタンを選択します。
14.1.7. Java Security Manager 内での JBoss EAP 6 の実行
secmgr
オプションを使用します。
-Djava.security.manager
Java システムプロパティーの直接使用ができなくなりました。以前の JBoss EAP 6 で Java Security Manager を有効にするために使用されていたこの方法は、JBoss EAP 起動スクリプトのフォールバックメカニズムとしてのみサポートされています。
前提条件
- この手順を実行する前に、Java Development Kit(JDK)または Java SE Runtime Environment(JRE)に含まれる policytool アプリケーションを使用してセキュリティーポリシーを記述する必要があります。テキストエディターを使用してセキュリティーポリシーを作成することもできます。パーミッションが必要なユーザーデプロイメントには、セキュリティーポリシーが必要です。この手順では、ポリシーが
EAP_HOME/bin/server.policy
にあることを前提としています。 - 設定ファイルを編集する前に、ドメインまたはスタンドアロンサーバーを完全に停止する必要があります。
手順14.5 JBoss EAP 6 の Java Security Manager の設定
設定ファイルを開く
設定ファイルを開いて編集します。編集が必要な設定ファイルは、管理対象ドメインまたはスタンドアロンサーバーとオペレーティングシステムのどちらを使用するかによって異なります。管理対象ドメイン
- For Linux:
EAP_HOME/bin/domain.conf
- Windows の場合:
EAP_HOME\bin\domain.conf.bat
スタンドアロンサーバー
- For Linux:
EAP_HOME/bin/standalone.conf
- Windows の場合:
EAP_HOME\bin\standalone.conf.bat
Java Security Manager の有効化
以下のいずれかの方法を使用して Java Security Manager を有効にします。- JBoss EAP 6 のサーバー起動スクリプトで
-secmgr
オプションを使用します。 - 設定ファイルの
secmgr="true"
行のコメントを解除します。Linux の場合:
# Uncomment this to run with a security manager enabled SECMGR="true"
Windows の場合:
rem # Uncomment this to run with a security manager enabled set "SECMGR=true"
Java セキュリティーポリシーの指定
-Djava.security.policy
を使用して、セキュリティーポリシーの場所を指定できます。これは、改行なしで 1 行のみに置く必要があります。-Djava.security.policy
を設定する場合は==
を使用すると、セキュリティーマネージャーは指定されたポリシーファイル のみ を使用するように指定します。=
を使用すると、セキュリティーマネージャーはJAVA_HOME/jre/lib/security/java.security
のpolicy.url
セクションに設定されたポリシー と組み合わせ て指定されたポリシーを使用するように指定します。関連する JBoss EAP 6 設定ファイルでセキュリティーポリシー Java オプションを追加します。管理対象ドメインを使用している場合は、PROCESS_CONTROLLER_JAVA_OPTS
およびHOST_CONTROLLER_JAVA_OPTS
が設定される前に挿入されていることを確認します。Linux の場合:
JAVA_OPTS="$JAVA_OPTS -Djava.security.policy==EAP_HOME/bin/server.policy -Djboss.home.dir=EAP_HOME"
Windows の場合:
set "JAVA_OPTS=%JAVA_OPTS% -Djava.security.policy==EAP_HOME\bin\server.policy -Djboss.home.dir=EAP_HOME"
ドメインまたはサーバーの起動
ドメインまたはサーバーを通常どおり起動します。
14.1.8. IBM JDK および Java Security Manager
JAVA_HOME/jre/lib/security/java.security
ファイルを編集し、policy.provider
の値を sun.security.provider.PolicyFile
に設定します。
policy.provider=sun.security.provider.PolicyFile
14.1.9. Security Manager ポリシーのデバッグ
手順14.6 一般的なデバッグの有効化
この手順を実行すると、セキュリティー関連デバッグ情報の一般的な機密レベルを有効にすることができます。
次の行をサーバー設定ファイルに追加します。- JBoss EAP 6 インスタンスが管理対象ドメインで実行されている場合は、Linux の場合は
bin/domain.conf
ファイル、Windows の場合はbin\domain.conf.bat
ファイルに追加されます。 - JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、行は Linux の場合は
bin/standalone.conf
ファイル、Windows の場合はbin\standalone.conf.bat
ファイルに追加されます。
JAVA_OPTS="$JAVA_OPTS -Djava.security.debug=access:failure"
set "JAVA_OPTS=%JAVA_OPTS% -Djava.security.debug=access:failure"
結果
セキュリティー関連デバッグ情報の一般的なレベルが有効になります。