2017-01-25 13 views
0

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

動作を理解する上でご案内してください。

ありがとうございました

+0

私はエキスパートではありませんが、CouchBaseが何らかの理由で(インデックスの再構築?)すべてのスレッドをシリアル化しようとしているように、メソッド名 'blockForSingle()'が聞こえます。私はCouchBaseのメーリングリスト/フォーラムの人々にそのスタックトレースを示し、それが何を意味するのかを質問します。 CouchBaseの内部を知っている知識豊富な人がいるかもしれません。 – markspace

+0

私はcouchbaseフォーラムにも同じ質問を投稿しました –

答えて

0

私は上記の質問に対する適切な説明と解決策を得ました。

スレッドのBLOCKED状態の理由は、同期操作の使用です。

代わりの

bucket.insert 

を使用してこれは、より良いスループットを得るために私達を助け、我々はまた、BLOCKED状態でスレッドを見ていません

Observable.just(metaId).flatMap(docId -> 
    bucket.async()        
    .upsert(JsonDocument.create(metaId, JsonObject.fromJson(docContent)))) 
    .toBlocking() 
    .singleOrDefault(null); 

として、私たちはCouchbaseのJAVA SDKで提供非同期操作を使用アプリケーションのTPSは非常に良い値に増加します。以下は

上記の質問

https://forums.couchbase.com/t/couchbase-threads-are-in-blocked-state/11524/2

ためのCouchbaseフォーラムディスカッションのスレッドで、これが役に立つことを願っています。

関連する問題