我正在使用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
这就是我创建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服务器?好吗?