第4章 JVM の調整
アプリケーションおよび JBoss EAP 環境に対して最良の JVM オプションを設定することは、パフォーマンスを調整する上で最も基本的なことの 1 つです。
本章にリストされている JVM オプションの多くは、Red Hat カスタマーポータルの JVM Options Configuration Tool を使用して簡単に生成できます。
JVM オプションを適用する方法は、JBoss EAP『設定ガイド』(スタンドアロンサーバーへの適用 および 管理対象ドメインのサーバーへの適用) を参照してください。
4.1. 固定ヒープサイズの設定
メモリー不足エラーが発生しないようにするため、適切なヒープサイズを設定する必要があります。
-Xms
オプションは初期ヒープサイズを設定し、 -Xmx
は最大ヒープサイズを設定します。実稼働環境では、初期および最大ヒープサイズを同じサイズに設定し、ヒープサイズを固定および事前割り当てすることが推奨されます。
たとえば、以下のオプションは 2048 MB のヒープサイズを設定します。
-Xms2048M -Xmx2048M
開発環境の負荷下でアプリケーションをテストし、最大メモリー使用率を判断することが推奨されます。実稼働でのヒープサイズは、オーバーヘッドを考慮して、テストした最大ヒープサイズよりも 25% 以上高くする必要があります。
4.2. ガベッジコレクターの設定
並行ガベッジコレクターはスループットガベッジコレクターとも呼ばれ、サーバークラスマシンの Java 8 でのデフォルトガベッジコレクター ですが、Red Hat は Java 9 からデフォルトになる予定の G1 ガベッジコレクターの使用を推奨します。一般的に、G1 ガベッジコレクターのパフォーマンスはほとんどの場合で CMS および平行ガベッジコレクターを上回ります。
G1 コレクターを有効にするには、以下の JVM オプションを使用します。
-XX:+UseG1GC
ガベッジコレクションのロギングオプション
ガベッジコレクションのロギングは、スタンドアロン JBoss EAP サーバーではデフォルトで有効になっています。JBoss EAP 管理対象ドメインでガベッジコレクションのロギングを有効にする場合は、「「ガベッジコレクションロギングの有効化」」を参照してください。
4.3. ラージページの有効化
JBoss EAP JVM のラージページを有効にすると、ページがメモリーでロックされ、通常のメモリーのようにディスクへのスワップ処理を行うことができません。
特にメモリー集中型のアプリケーションでは、ヒープをディスクへページまたはスワップできず、常にラージページを利用できることがラージページを使用する場合の利点となります。
ラージページを使用する場合の難点の 1 つは、システムで実行されている別のプロセスがメモリーに即時アクセスできない可能性があり、これらのプロセスに対して過剰なページングが行われる可能性があることです。
他のパフォーマンス設定の変更と同様に、テスト環境で変更の影響をテストすることが推奨されます。
プロセスがラージページを使用できるようにオペレーティングシステムが設定されている必要があります。
Red Hat Enterprise Linux システムでは、
HugeTLB
ページを明示的に設定して、確実に JBoss EAP のプロセスがラージページにアクセスできるようにする必要があります。Red Hat Enterprise Linux のメモリーオプションの設定に関する詳細は、Red Hat Enterprise Linux『パフォーマンスチューニングガイド』の「メモリー」の章を参照してください。
Windows サーバーシステムでは、JBoss EAP を実行しているユーザーにラージページの特権が割り当てられている必要があります。
-
コントロールパネル
管理ツール ローカルセキュリティポリシー と選択します。 -
ローカルポリシー
ユーザー権利の割り当て と選択します。 - メモリ内のページのロック をダブルクリックします。
- ラージページを使用する Windows Server ユーザーおよびユーザーグループを追加します。
- マシンを再起動します。
-
コントロールパネル
ラージページのサポートを有効または無効にします。
明示的に JBoss EAP JVM のラージページのサポートを有効にするには、以下の JVM オプションを使用します。
-XX:+UseLargePages
明示的に JBoss EAP JVM のラージページのサポートを無効にするには、以下の JVM オプションを使用します。
-XX:-UseLargePages
JBoss EAP の起動時に、メモリーの確保に関する警告がないことを確認してください。
Red Hat Enterprise Linux では、以下のようなエラーが表示されます。
OpenJDK 64-Bit Server VM warning: Failed to reserve shared memory. (error = 1)
Windows Server では、以下のようなエラーが表示されます。
Java HotSpot(TM) 64-Bit Server VM warning: JVM cannot use large page memory because it does not have enough privilege to lock pages in memory.
警告が表示された場合、オペレーティングシステムと JVM オプションが正しく設定されていることを確認してください。
詳細は、ラージページの Java サポートに関する Oracle のドキュメントを参照してください。
4.4. アグレッシブな最適化の有効化
アグレッシブな最適化 (AggressiveOpts) の JVM オプションを使用すると、ご使用の環境でパフォーマンスを改善できます。このオプションは、今後の Java リリースでデフォルトとなる予定の Java 最適化機能を有効にします。
AggressiveOpts を有効にするには、以下の JVM オプションを使用します。
-XX:+AggressiveOpts
4.5. ulimits の設定
Red Hat Enterprise Linux および Solaris プラットフォームでは、JBoss EAP JVM プロセスに適切な ulimit
値を設定する必要があります。「ソフトな」ulimit
の場合は一時的にその値を超えることが許されますが、「ハードな」ulimit
はリソース使用率の厳格な限度になります。適切な ulimit
の値は、環境とアプリケーションによって異なります。
IBM JDK を使用している場合、IBM JDK は JVM プロセスによって使用されるオープンファイルの最大数をソフトな制限として使用することに注意してください。Red Hat Enterprise Linux では、ソフトな制限のデフォルト値 (1024
) は、IBM JDK を使用する JBoss EAP プロセスでは低すぎると見なされます。
JBoss EAP プロセスに適用される制限が低すぎると、JBoss EAP の起動時に以下のような警告が表示されます。
WARN [org.jboss.as.warn.fd-limit] (main) WFLYSRV0071: The operating system has limited the number of open files to 1024 for this process; a value of at least 4096 is recommended.
現在の ulimit
値を確認するには、以下のコマンドを使用します。
ソフトな
ulimit
値の場合:ulimit -Sa
ハードな
ulimit
値の場合:ulimit -Ha
ulimit
をオープンファイルの最大数に設定するには、適用する数を指定して以下のコマンドを使用します。
オープンファイルの最大数にソフト
ulimit
を設定する場合:ulimit -Sn 4096
オープンファイルの最大数にハード
ulimit
を設定する場合:ulimit -Hn 4096
ulimit
の設定が効果的であるようにするため、実稼働システムではソフトな制限とハードな制限に同じ値を設定することが推奨されます。
設定ファイルを使用した ulimit
値の設定に関する詳細は、カスタマーポータルの「ulimit 値を設定する」を参照してください。
4.6. ホストコントローラーおよびプロセスコントローラー JVM の調整
JBoss EAP 管理対象ドメインホストのホストコントローラーとプロセスコントローラーには個別の JVM があります。ホストコントローラー と プロセスコントローラー のロールに関する詳細は、JBoss EAP『設定ガイド』を参照してください。
ホストコントローラーとプロセスコントローラーの JVM 設定を調整できますが、大きな管理対象ドメイン環境でも、ホストコントローラーおよびプロセスコントローラーのデフォルトの JVM 設定で十分です。
ホストコントローラーおよびプロセスコントローラーのデフォルトの JVM 設定は、最大 20 個の JBoss EAP ホストが各自 10 個の JBoss EAP サーバーを実行する、JBoss EAP サーバーの合計ドメインサイズが 200 の管理対象ドメインサイズでテストされています。
大型の管理対象ドメインで問題が発生した場合、ご使用の環境で ホストコントローラーまたはプロセスコントローラー JVM を監視 し、ヒープサイズなどの JVM オプションの適切な値を判断する必要がある場合があります。