Topics
Enterprise Architecture
JRockit JVMの最適化チェックリスト/チューニングガイド
Pages:
1,
2,
3
この記事に記載された情報は完全なものではありません。しかし、JRockit JVM層の最適なチューニングと十分な理解への第1歩となるはずです。
JRA記録を作成するには、コマンドラインを使用するか、EclipseベースのJRockit Mission Control(JRMC)ツールを使用します。JRMCを使用すると、複数のJRockit JVMに接続してJRA記録を収集したり、JVMのリアルタイムデータを参照したり、メモリリークを検出してトラブルシューティングを行ったり、アプリ ケーション内のレイテンシ(実行が遅い部分)を確認したりすることができます。JRockit Mission Controlの実行方法については、この後のセクションを参照してください。
#ctrlhander.act file located in the <jrockit_home>/jre/bin/jrockit directory set_filename filename=./jrocket_control_breakoutput.txt append=true timestamp print_threads timestamp version print_class_summary print_object_summary increaseonly=true print_threads print_threads nativestack=true print_utf8pool timestamp print_memusage timestamp heap_diagnostics timestamp # The following is optional and is another way to generate a JRA recording jrarecording filename=./myjra.xml time=600
質問:なぜlargePagesを使用するのですか。
回答:largePagesを使用すると、ヒープメモリがロックされ、スワップのページアウトの対象にならないというメリットが あります(IOWaitとGCを低減できる場合もあります)。物理メモリのヒープ内にあるオブジェクトにアクセスした方が明らかに高速で処理できます。し たがって、largePages オプションは、パフォーマンスの目標を達成するには効果的なオプションです。
HugePages_Total: xxx HugePages_Free: yyy Hugepagesize: zzz KBxxxが0の場合、ラージページは割り当てられていません。
mkdir -p /mnt/hugepages
mount -t hugetlbfs nodev /mnt/hugepages
chmod 777 /mnt/hugepages
echo 20 > /proc/sys/vm/nr_hugepages
ここで、20という数字は予約するページ数を表します。割り当てを解除するには、0ページを割り当てます ( メモ:適切な数値を決定する方法については、この後の質問を参照してください)。
要求したページ数がすべて予約されない場合、メモリの空き容量が不足しています。十分な空き容量があるはずの場合は、メモリが過度に断片化されてい る可能性があります。この場合、マシンを再起動することをお勧めします。ラージページはスワップできないため、すべてが物理メモリに維持される必要があり ます。
RHEL3では、このファイルは/proc/sys/vm/hugetlb_poolという名前のようなので、コマンドは次のようになります。
echo 500 > /proc/sys/vm/hugetlb_pool
ここでは、500という数字はページ数ではなく、要求しているMBを表します。JRockitで一時的なヒュージページのファイルを直接削除できな かった場合、実行後に削除する必要があります。削除しないと、これらのページは解放されるまで使用できません。これはRedHatカーネルのビルド 2.4.18-e.25.smpでは使用できますが、2.4.18-e.12.smpでは使用できません。
質問:/proc/sys/vm/nr_hugepagesに送信するのに適切な数値は、どのように決定すればいいでしょうか。
回答:Javaヒープ全体をlargePagesに入れることが目的なので、ヒープの大きさとページサイズによって答えは異なり ます。/proc/sys/vm/nr_hugepagesに適した数値を決定する方法は、次の例に示すように簡単です。例えば、所定の数値が以下のとお りだとします。
JVM Max Heap = 1536MB (1572864 KB approx) HPAGE_SIZE = 2 MB
この場合、/proc/sys/vm/nr_hugepagesに送信する値は、およそ7.7となります(1572864MB/2MB)。
ラージページの数を動的に設定するのは理論上は可能ですが、実際にはそれほど動的にはなりません。ラージページの数を減らすのは難しくないのです が、数を増やすのが困難です。これは、ラージページを作成するためには、Linuxで十分に大きい連続するメモリ領域を見つける必要があるためです。この ような領域が見つからなかった場合、ラージページは作成できません。
起動直後は、メモリの断片化がそれほど進んでいないので十分に大きい領域を見つけるのは難しくありません。しかし、マシンの実行時間が長くなると、 メモリの断片化が進みます。このため、十分な数のラージページを割り当てるには、起動スクリプトを使用するか手動で起動し、その直後にページを設定する必 要があります。
Steven Pozaryckiは、BEA Systemsの主席システムエンジニアとして、お客様がBEA製品で運用するミッションクリティカルアプリケーション向けのソリューションの構築、および複雑な問題のトラブルシューティングと解決に取り組んでいます。