Couchbase DBを使用するアプリケーションの負荷テストを行っています。 スレッドダンプを定期的に取得しています。 couchbaseスレッドを呼び出した後のすべてのスレッドダンプは、BLOCKED状態です。 私たちは、この動作を過小されていません以下Couchbaseスレッドはブロック状態にあります
は
DefaultCouchbaseEnvironment.builder().kvTimeout(5000).connectTimeout(7500)
.viewTimeout(7500).queryTimeout(7500).disconnectTimeout(10000)
.retryStrategy(BestEffortRetryStrategy.INSTANCE).build();
Couchbaseの環境の設定であり、我々は以下
JsonDocument doc =
JsonDocument.create("1236",
JsonObject.create().put("name", "test"));
bucket.insert(doc);
のような、単純なCRUDのoerationsを超えるやっている私たちはJstackから得たものをstackstraceです
Thread 4257: (state = BLOCKED)
- sun.misc.Unsafe.park(boolean, long) @bci=0 (Compiled frame; information may be imprecise)
- java.util.concurrent.locks.LockSupport.parkNanos(java.lang.Object, long) @bci=20, line=215 (Compiled frame)
- java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(int, long) @bci=139, line=1037 (Compiled frame)
- java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(int, long) @bci=25, line=1328 (Compiled frame)
- java.util.concurrent.CountDownLatch.await(long, java.util.concurrent.TimeUnit) @bci=10, line=277 (Compiled frame)
- com.couchbase.client.java.util.Blocking.blockForSingle(rx.Observable, long, java.util.concurrent.TimeUnit) @bci=32, line=72 (Compiled frame)
- com.couchbase.client.java.CouchbaseBucket.get(java.lang.String, long, java.util.concurrent.TimeUnit) @bci=17, line=118 (Compiled frame)
- com.couchbase.client.java.CouchbaseBucket.get(java.lang.String) @bci=9, line=113 (Compiled frame)
すべてのドキュメントKB単位で 3つのノードを持つクラスタがあります。 Java sdk version- 2.3.4
動作を理解する上でご案内してください。
ありがとうございました
私はエキスパートではありませんが、CouchBaseが何らかの理由で(インデックスの再構築?)すべてのスレッドをシリアル化しようとしているように、メソッド名 'blockForSingle()'が聞こえます。私はCouchBaseのメーリングリスト/フォーラムの人々にそのスタックトレースを示し、それが何を意味するのかを質問します。 CouchBaseの内部を知っている知識豊富な人がいるかもしれません。 – markspace
私はcouchbaseフォーラムにも同じ質問を投稿しました –