Javaリソースの調整
Java Virtual Machine(JVM)を調整すると、パフォーマンスが向上したり、メモリーの消費量を抑えられる可能性があります。
Java Virtual Machine(JVM)を調整すると、パフォーマンスが向上したり、メモリーの消費量を抑えられる可能性があります。
ガーベージ・コレクションについて
ガーベージ・コレクション(GC)とは、Javaがメモリーで不要になったデータを削除するプロセスです。最適なパフォーマンスを実現するには、適切なガーベージ・コレクターとヒープ・サイズ設定を選択することが重要です。
間違いなく最小限に抑えたいのは、ガーベージ・コレクションの一時停止で、ストップ・ザ・ワールド・イベントとも呼ばれます。メモリー領域が満杯で、継続するには、JVMが空き領域を作成する必要がある場合、一時停止が発生します。一時停止中は、すべての操作が一時中断します。一時停止はネットワーキングに影響するため、クラスター内の他のノードに対して、そのノードはダウンしていると表示される場合があります。さらに、SELECT文およびINSERT文は待機するため、読み取りと書き込みのレイテンシーが増します。1秒を超える一時停止、その秒の大部分に追加される1秒以内の複数の一時停止を避けます。問題の根本的原因は、メモリー内に格納されたデータ率がデータを削除する速度を上回ることです。特定の症状と原因については、「ガーベージ・コレクションの一時停止」を参照してください。
memtable_heap_space_in_mbJavaガーベージ・コレクターを選択する
- 16 GB~64 GBのヒープ・サイズ。
G1は最初に、最も大きいガーベージ・オブジェクトを含むヒープの範囲をスキャンし常にヒープのコンパクションを行うため、大型のヒープの場合、CMS(コンカレント・マーク・スイープ)よりもパフォーマンスが優れています。一方で、ガーベージ・コレクションを実行する際、CMSはアプリケーションを停止します。
- ワークロードは変数で、クラスターは常に別のプロセスを実行しています。
- 将来のプルーフィングに備えて、CMSはJava 9で廃止予定です。
- G1は構成が簡単です。
- G1は自己調整します。
- MAX_HEAP_SIZEのみ、設定する必要があります。
- ガーベージ・コレクションを手動で調整し、テストする時間と専門知識があります。
ヒープにさらにメモリーを割り当てると、ガーベージ・コレクション機能により、ヒープ・メモリー内のデータベース・メタデータ量が増すため、パフォーマンスが低下する場合がありますのでご注意ください。
- ヒープ・サイズは、16 GB以下です。
- ワークロードは固定で、クラスターは常に同じプロセスを実行しています。
- この環境では、可能な限り最小のレイテンシーが要求されます。
Javaガーベージ・コレクターとして、CMSを構成する
- jvm.optionsを開きます。
- すべての行を、
### GI Settings
セクションにコメントアウトします。 - すべての
### CMS Settings
セクションをコメント解除します。
ヒープ・サイズを特定する
Javaヒープを大きく設定しがちですが、そうするとコンピューターのRAMのほとんどを消費することになります。ただし、この設定はOSのページ・キャッシュ操作を妨げる可能性があります。頻繁にアクセスするデータのOSのページ・キャッシュを保持するオペレーティング・システムは、このデータをメモリーを維持するのに長けています。OSのページ・キャッシュを調整するプロパティは通常、行キャッシュを大きくするよりも優れたパフォーマンスを発揮します。
max(min(1/2 ram, 1024 megabytes), min(1/4 ram, 32765 megabytes))
- ヒープ・サイズは通常、システム・メモリーの¼から½になります。
- オフヒープ・キャッシュおよびファイル・システム・キャッシュでも使用するため、すべてのメモリーをヒープに費やさないでください。
- GCを調整する場合、GCロギングを常に有効にしてください。
- 設定は徐々に調整し、各インクリメンタルの変更をテストします。
- 特にDSE Searchを使用する際は、GCの並列処理を有効にします。
- GCInspectorクラスは、ガーベージ・コレクションに要する時間が200ミリ秒を超えるガーベージ・コレクションに関する情報をログに記録します。ガーベージ・コレクションが頻繁に発生し、完了までにある程度の時間(秒)を要する場合、JVMに対するガーベージ・コレクションの圧力が大きいことを示します。ガーベージ・コレクション・オプションの調整に加え、その他の解決策にはノードの追加やキャッシュ・サイズの縮小があります。
- G1を使用するノードの場合、DataStaxではMAX_HEAP_SIZEを可能な限り大きく(最大で64 GB)することを推奨しています。
MAX_HEAP_SIZE
ハードウェアのセットアップ | 推奨のMAX_HEAP_SIZE |
---|---|
G1は最新のコンピューター用(8コア以上)で、最大256 GB RAM | 16 GB~32765 MB。 「Javaパフォーマンス調整」を参照してください。 |
CMSは最新のコンピューター用(8コア以上)で、最大256 GB RAM | 16 GB以下。 |
従来のコンピューター | 通常、8 GB。 |
- 1つのノードでjvm.optionsファイルの最大ヒープ・サイズを任意の高い値に設定します。たとえば、G1を使用する場合:
-Xms48G -Xmx48G
ストップ・ザ・ワールドGCの一時停止を避けるために、サイズ変更時は最小値(-Xms)および最大値(-Xmx)のヒープ・サイズを同じ値に設定し、起動時にヒープをメモリー内にロックすることで、スワップアウトを防げます。
- GCロギングを有効にします。
- ログを確認して、そのノードが使用しているヒープを表示し、クラスターのヒープ・サイズを設定する上でこの値を使用します。
パフォーマンスの改善が見られない場合は、DataStaxサービス・チームまでご相談ください。
HEAP_NEWSIZE
- コア数の100倍
- MAX_HEAP_SIZEの¼
-Xmn800M
大規模なHEAP_NEWSIZEは、GCの一時停止時間が長くなります。小規模なHEAP_NEWSIZEの場合、GCの一時停止は短くなりますが、通常、負荷が大きくなります。
DataStax Enterpriseによるメモリーの使用方法
- 読み取りを実行するために、データベースはヒープ・メモリー内で以下のコンポーネントを維持します。
- ブルーム・フィルター
- パーティション・サマリー
- パーティション・キー・キャッシュ
- 圧縮オフセット
- SSTableインデックス・サマリー
このメタデータは、メモリーに常駐し、データの合計に比例します。一部のコンポーネントは、メモリーの合計サイズに比例して大きくなります。
- データベースは読み取りまたはアンチエントロピー・リペア用のレプリカを収集し、ヒープ・メモリー内でレプリカを比較します。
- データベースに書き込まれたデータは、最初にヒープ・メモリー内のmemtableに格納されます。memtableは、ディスクのSSTableにフラッシュされます。
- ページのキャッシュ。データベースは、ディスク上のファイルを読み取ったときに、追加メモリーをページのキャッシュとして利用します。
- ブルーム・フィルターと圧縮オフセット・マップはオフヒープに置かれます。
- データベースは、キャッシュされた行をネイティブのメモリー、Javaヒープ外に格納します。これにより、JVMヒープに対する要求がともに小さくなります。これは、JVMガーベージ・コレクションのパフォーマンスにとって最適なヒープ・サイズを保つのに役立ちます。
その他のDataStax EnterpriseサービスのJVMパラメーターを調整する
- DSE Search:一部のユーザーの報告によると、スタック・サイズを大きくすると、Tomcatのパフォーマンスが向上します。
スタックのサイズを大きくするには、cassandra-env.shファイルで、デフォルトの設定をコメント解除して変更します。
また、memtable空間を小さくして検索キャッシュに空き領域を与えると、パフォーマンスが向上する可能性があります。cassandra.yamlファイル内のmemtable_heap_space_in_mbプロパティとmemtable_offheap_space_in_mbプロパティを変更して、memtable領域を変更します。# Per-thread stack size. JVM_OPTS="$JVM_OPTS -Xss256k"
-
MapReduce:MapReduceはJVMの外で実行するため、JVMの変更はAnalytics/Hadoopの動作に直接影響しません。
その他のJMXのオプション
DataStax Enterpriseは、Java Management Extensions(JMX)を介して、その他の統計と管理操作を公開しています。JConsoleとnodetoolのユーティリティは、JMX対応管理ツールです。
cassandra-env.sh内の以下のプロパティを編集し、JMX管理のデータベースを構成します。
- com.sun.management.jmxremote.port:データベースがJMX接続をリッスンするポートを設定します。
- com.sun.management.jmxremote.ssl:JMXのSSLを有効または無効にします。
- com.sun.management.jmxremote.ssl:JMXのリモート認証を有効または無効にします。
- -Djava.rmi.server.hostname:JMXが接続に使用するインターフェイスのホスト名またはIPアドレスを設定します。接続に問題がある場合は、コメント解除して設定します。
cassandra.yaml
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/cassandra/cassandra.yaml |
tarボール・インストール | installation_location/resources/cassandra/conf/cassandra.yaml |
cassandra-env.sh
cassandra-env.shファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/cassandra/cassandra-env.sh |
tarボール・インストール | installation_location/resources/cassandra/conf/cassandra-env.sh |
jvm.options
jvm.optionsファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/cassandra/jvm.options |
tarボール・インストール | installation_location/resources/cassandra/conf/jvm.options |