2017-03-02 20 views
1

Google CloudでAerospikeクラスタを実行しています。 this postの推奨に続いて、私は最後のバージョン(3.11.1.1)に更新し、すべてのサーバーを再作成しました。Aerospikeエラー:すべてのバッチキューがいっぱいです

enter image description here

ため:実際には、この変更は、今では怒鳴るグラフでショーとして、20%であり、それは前に約75%の負荷だった(私の5台のサーバーがはるかに低いCPU負荷で動作させます私は変更することが推奨、このdiscussion about the topicを見つけ

All batch queues are full

:この低負荷で、私はこれをしなかったときは、私のアプリケーションは以下のエラーを受け取るために始めた4サーバーへのクラスタサイズを縮小することを決定しましたパラメータ012私は(2,4,8,16とバッチインデックススレッド)の値の多くの組み合わせを試し

asadm -e "asinfo -v 'set-config:context=service;batch-index-threads=NEW_VALUE'"

コマンド及びそれらのどれととbatch-max-unused-buffersは、問題を解決し、またbatch-index-threads PARAMを変更します。私の問題を解決するものはありません。私はAll batch queues are fullエラーを受信し続ける。私は、これらのサーバー上の300ギガバイトSSDディスクを使用

service { 
    user root 
    group root 
    paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1. 
     paxos-recovery-policy auto-reset-master 
    pidfile /var/run/aerospike/asd.pid 
    service-threads 32 
    transaction-queues 32 
    transaction-threads-per-queue 4 
    batch-index-threads 40 
    proto-fd-max 15000 
    batch-max-requests 30000 
    replication-fire-and-forget true 
} 

は、ここに私のaerospace.conf関連する情報です。またはあなたに関係ない場合もあり

+1

私はあなたがディスクのIOPS制限に遭っている疑いがあります。限界に達すると、バッチ処理はディスクIOに時間を費やします。これは、航空宇宙が多くの作業を実行することができないため、CPU使用率も低下させます。asym -e "asinfo -v" set-config:context = namespace; id = test; enable-benchmarks-batch-sub = true '"を実行すると、詳細バッチベンチマークを有効にできますか?バッチコールがどこの時間に費やしているかについての詳細を示します。 – sunil

答えて

2

A簡単なメモ:

A common mistake we have seen in the past is that developers decide to use 'batch get' as a general purpose 'get' for single and multiple record requests. The single record get will perform better for single record requests.

それはあなたがクライアントとサーバ間のネットワークによって制約されている可能性があります。 5〜4のノードを減らすと、集約パイプが減少しました。さらに、ノードを削除するとクラスタの移行が開始され、追加のネットワーク負荷が追加されます。

+0

私のクライアントは1CPUサーバで、2Gbpsに制限されています。ネットワーク監視グラフから、これらのサーバーは150MB(1.2Gbps)で動作していますが、これは上限をはるかに超えています。私のサーバーは8Gbpsに制限されており、上限は600MB(4.8Gps)です。 (https://cloud.google.com/compute/docs/networks-and-firewalls#egress_throughput_caps) –

1

私はbatch-max-buffer-per-queue configパラメータを調べます。あなたもbatch-max-unused-buffers 1 + batch-max-buffer-per-queue X batch-index-threadsに(少なくとも)を上げることになるでしょう255のデフォルトからこの値を上げると併せて

Maximum number of 128KB response buffers allowed in each batch index queue. If all batch index queues are full, new batch requests are rejected.

。そうしないと、空き(未使用)バッファの量が使用しているバッファの量よりも少なくなるため、新しいバッファが作成され、絶えず破棄されます。バッチ応答が提供される瞬間、システムはバッファを最大未使用数までトリミングしようと努力する。これは、常に増加しているbatch_index_created_buffersのメトリックに反映されています。

これには十分なDRAMが必要であることに注意してください。あなたは320にbatch-max-buffer-per-queueを上げた場合たとえば、あなたはbatch-max-unused-buffersは、ノード単位の1625メガバイトの最大メモリ消費量(1.59ギガバイト)を持っているであろう13000に設定する必要があり、パフォーマンスのために

40 (`batch-index-threads`) x 320 (`batch-max-buffer-per-queue`) x 128K = 1600MB 

を消費します。

+0

私は 'batch-max-unused-buffers'を21000(40 * 512)+いくつかのバッファに変更しましたが、問題は続く。私はまだ同じエラーが表示され、 'batch_index_created_buffers'は常に上昇しています。 –

+0

使用していないバッファが十分にないことを示す記号ですが、なぜバッチインデックススレッド' x 'バッチより大きいのか、 max-bugger-per-queue' ...あなたはparamの設定をもう一度確認できますか? –

+0

ところで、このナレッジベースの記事は次のトピックを扱います:https://discuss.aerospike.com/t/batch-full-error/4329 –

関連する問題