2017-05-12 4 views
1

索引付け中2B小さな文書ES 5.4となります。長い索引作成中に弾性検索5が停止する

文書は、〜3Kのインデックスで構成され、合計で2TBです。インデックスの占有率は数KBから数百GBまで異なり、それぞれを5GB未満に保つためにシャードされています

私は、各2K文書のバルク要求に異なる指標で同時に14のスレッドで索引付けしています。サーバーには16CPUと32GBのRAMがあり、このインデックス処理中に読み取りは行われません。

関連ESの構成は以下のとおりです。

  • Xms12g -Xmx12g
  • MAX_OPEN_FILES=1000000

  • indices.memory.index_buffer_size: 95%
  • bootstrap.memory_lock:truejvm.optionsに50〜100Mインデックス付き文書のESが大幅にスローダウンし始めた後。私が読んログで

    GCの終了日を見てみると
    [2017-05-11T16:44:24,751][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2141] overhead, spent [13.5s] collecting in the last [14.3s] 
    [2017-05-11T16:44:40,323][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][old][2143][337] duration [14s], collections [1]/[14.5s], total [14s]/[54.2m], memory [11.8gb]->[11.4gb]/[11.8gb], all_pools {[young] [865.3mb]->[533.8mb]/[865.3mb]}{[survivor] [75mb]->[0b]/[108.1mb]}{[old] [10.9gb]->[10.9gb]/[10.9gb]} 
    [2017-05-11T16:44:40,323][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2143] overhead, spent [14s] collecting in the last [14.5s] 
    [2017-05-11T16:44:53,004][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][old][2145][338] duration [10.8s], collections [1]/[11.6s], total [10.8s]/[54.4m], memory [11.8gb]->[11.4gb]/[11.8gb], all_pools {[young] [865.3mb]->[538.9mb]/[865.3mb]}{[survivor] [44.9mb]->[0b]/[108.1mb]}{[old] [10.9gb]->[10.9gb]/[10.9gb]} 
    [2017-05-11T16:44:53,004][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2145] overhead, spent [10.8s] collecting in the last [11.6s] 
    [2017-05-11T16:45:05,141][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][old][2147][339] duration [11s], collections [1]/[11.1s], total [11s]/[54.6m], memory [11.8gb]->[11.4gb]/[11.8gb], all_pools {[young] [865.3mb]->[558.3mb]/[865.3mb]}{[survivor] [103.1mb]->[0b]/[108.1mb]}{[old] [10.9gb]->[10.9gb]/[10.9gb]} 
    [2017-05-11T16:45:05,142][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2147] overhead, spent [11s] collecting in the last [11.1s] 
    [2017-05-11T16:45:19,928][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][old][2149][340] duration [13s], collections [1]/[13.7s], total [13s]/[54.8m], memory [11.8gb]->[11.5gb]/[11.8gb], all_pools {[young] [865.3mb]->[570.1mb]/[865.3mb]}{[survivor] [48.9mb]->[0b]/[108.1mb]}{[old] [10.9gb]->[10.9gb]/[10.9gb]} 
    [2017-05-11T16:45:19,928][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2149] overhead, spent [13s] collecting in the last [13.7s] 
    [2017-05-11T16:45:35,926][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][old][2152][341] duration [13.7s], collections [1]/[13.8s], total [13.7s]/[55.1m], memory [11.8gb]->[11.5gb]/[11.8gb], all_pools {[young] [865.3mb]->[575mb]/[865.3mb]}{[survivor] [104.6mb]->[0b]/[108.1mb]}{[old] [10.9gb]->[10.9gb]/[10.9gb]} 
    [2017-05-11T16:45:35,931][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2152] overhead, spent [13.7s] collecting in the last [13.8s] 
    [2017-05-11T16:45:49,919][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][old][2154][342] duration [12.8s], collections [1]/[12.9s], total [12.8s]/[55.3m], memory [11.8gb]->[11.5gb]/[11.8gb], all_pools {[young] [865.3mb]->[577.1mb]/[865.3mb]}{[survivor] [102.3mb]->[0b]/[108.1mb]}{[old] [10.9gb]->[10.9gb]/[10.9gb]} 
    [2017-05-11T16:45:49,919][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2154] overhead, spent [12.8s] collecting in the last [12.9s] 
    [2017-05-11T16:46:03,976][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][old][2156][343] duration [12.1s], collections [1]/[13s], total [12.1s]/[55.5m], memory [11.8gb]->[11.5gb]/[11.8gb], all_pools {[young] [865.3mb]->[601mb]/[865.3mb]}{[survivor] [50.9mb]->[0b]/[108.1mb]}{[old] [10.9gb]->[10.9gb]/[10.9gb]} 
    [2017-05-11T16:46:03,976][WARN ][o.e.m.j.JvmGcMonitorService] [VT0Xr1c] [gc][2156] overhead, spent [12.1s] collecting in the last [13s] 
    

    、それらはすべて、次のGCの開始日の全く同じです。これらのGCの持続時間は10秒を超えており、Javaがメモリ不足になるのを防ぐためにESをブロックしているようです。 ESがGCに対して停止すると、バルク要求はタイムアウト(30秒以上)になり、インデックス処理が失敗します。

    ES 2.4ではこの問題はありませんでした。私はES 5.4を使用しています。なぜなら、インデックス間でヒープを分割する方が良いということです。

    何か間違っていますか? インデックス作成プロセス全体でパフォーマンスを高く保つために変更する必要はありますか?

  • +0

    2.4では、正確な設定とインデックス作成のアプローチとハードウェアリソースを使用していましたが、それは機能しましたか?疑わしい。 –

    +0

    ES 2.4では、インデクサスレッドは3つしかなく、index_buffer_sizeは90%(95%ではありません)でした。 –

    +0

    この場合、関連ビットはデータの量が少なかった。 –

    答えて

    3

    まず、インデックスが多すぎると、シャードは大きくなる可能性があります.30-50GB以上です。

    ヒープの95%がインデックス作成プロセス(indices.memory.index_buffer_size: 95%)に使用されている場合、どのようにESがターム、逆インデックスおよびその他のすべてのデータ構造を格納すると思いますか?どのメモリに?あなたはそれをいくつかの部屋に与える必要があります。 2TBのデータサイズの場合、私はindex_buffer_size: 50%より高くならないでしょう。

    +0

    私は2つの構成を試しました: - 3つのインデクサースレッドと95%のindex_buffer_size。すべてを索引付けするには42時間かかります。 - 14個のインデクサスレッドと50%のindex_buffer_size。すべてを索引付けするのに30時間かかります。 両方の場合:エラーは見つかりませんでした。 PS:これらのデータ構造はインデックス作成段階と検索段階の両方で共有されるため、index_buffer_sizeの95%が必要なメモリを差し引いて計算されていたと思います。 –

    +1

    'indices.memory.index_buffer_size パーセンテージまたはバイトサイズのいずれかの値を受け入れます。これはデフォルトで10%になります。つまり、ノードに割り当てられたヒープ全体の10%が、すべてのシャードで共有されるインデックスバッファサイズとして使用されます.' https://www.elastic.co/guide/en/elasticsearch/reference /5.4/indexing-buffer.html –