CouchBase客户端无法缓存小于20mb的对象。 超时错误

我正在使用CouchBase客户端(couchbase-client-1.4.3)将我的序列化POJO(4mb-8mb大小的对象) concurrently缓存到Couchbase服务器中。

 for(upto 20 itertarions){ new Thread().start().. //this thread cache the objects Thread.sleep(500); // the less sleep time, the more cache failures :( } 

我有2个复制的服务器。 客户端可以缓存小型对象,但是当对象大小增加时,它会抛出exception。

 Caused by: net.spy.memcached.internal.CheckedOperationTimeoutException: Timed out waiting for operation - failing node: 192.168.0.1/192.168.0.2:11210 at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:167) at net.spy.memcached.internal.OperationFuture.get(OperationFuture.java:140)` 

我发现了类似的问题和答案。 但是,由于使用couchbase客户端的应用程序存在内存问题,我不能升级我的内存。 我怎么试过添加-XX:+UseConcMarkSweepGC -XX:MaxGCPauseMillis=500等JVM参数-XX:+UseConcMarkSweepGC -XX:MaxGCPauseMillis=500

这就是我创建couchBase缓存客户端的方法

 CouchbaseConnectionFactoryBuilder cfb = new CouchbaseConnectionFactoryBuilder(); cfb.setFailureMode(FailureMode.Retry); cfb.setMaxReconnectDelay(5000); cfb.setOpTimeout(15000); cfb.setOpQueueMaxBlockTime(10000); client=new CouchbaseClient(cfb.buildCouchbaseConnection( uris,BUCKET_TYPE,PASSWORD)); 

我尝试使用最大时间间隔来使缓存成功并避免超时。但它也不起作用。在我们的实际应用程序中,通常的7或8个缓存可以在一秒钟内发生。 在缓存成功发生之前,应用程序无法保持进程。(如果等待,则缓存因为时间消耗而无用。获取直接数据库总是更便宜!)

请任何人让我知道如何改进我的couchbase客户端(因为我有硬件和JVM限制的限制,我正在寻找改善客户端的方法)以避免这种超时并提高性能? 我不能从couchbase客户端进行序列化压缩并自己完成吗?

更新:我的COUCHBASE设置。
– 我正在缓存序列化对象,其大小为5到10mb。
– 我在不同的机器上有2个节点。
– 每台电脑有4GB内存。 CPU是:一台是2核,另外4核。 (这还不够吗?)
– 客户端应用程序在具有4个核心的PC中运行。
– 我刚刚为此测试配置了一个LAN。
-Both OS是ubuntu 14.一台是32位另一台64位。
– 沙发基地版本是最新社区版couchbase-server-community_2.2.0_x86_64 。(这是这couchbase-server-community_2.2.0_x86_64吗?:()
– Couchbase客户端Couchbase-Java-Client-1.4.3
– 有100个线程启动,500ms间隙。 每个线程缓存到CB。

另外,我检查了系统监控。 CB节点和客户端运行的PC显示更多的CPU和RAM使用,但是其他复制的PC(较少的硬件function)没有显示太多的硬件使用,这是正常的。

编辑:这可能是因为客户端问题或CB服务器? 有什么想法吗?