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

时间:2014-08-07 12:01:20

标签: java caching couchbase

我正在使用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台复制的服务器。客户端可以缓存小型对象,但是当对象大小增加时,它会抛出异常。

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参数

这就是我创建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是:一个pc是2个核心,另外4个核心。 (这还不够吗?)
- 客户端应用程序在具有4个核心的PC中运行 - 我刚刚为此测试配置了一个LAN - 两个操作系统都是ubuntu 14.一个是32位,另一个是64位 - 沙发基地版本是最新社区版couchbase-server-community_2.2.0_x86_64。(这是这辆车吗?:()
- Couchbase客户Couchbase-Java-Client-1.4.3
- 有100个线程启动,500ms间隙。每个线程缓存到CB。

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

编辑:这是因为客户端问题还是CB服务器?好吗?

0 个答案:

没有答案