2017-07-18 64 views
0

我们在10个节点群集(apprx 500 MB数据)的缓存中有2百万个分布式数据对象(未复制)。备份计数是一个。我们看到以下错误/警告。 你们知道我什么时候能看到这些错误吗?我已经对一些日志进行了清理,以避免分享敏感内容。大部分时间我们做缓存读取(大约400次请求/秒),并且整个缓存每2小时重新初始化一次。Hazelcast - 使用apprx 500请求/秒读取2百万个对象时读取缓存时出错读取

我知道我们可以做复制缓存来提高性能,但是想知道这里发生了什么问题。当我用较小的群集(例如5个节点)运行时,一切正常。

  • Hazelcast版本3.6.3
  • 服务器大小8芯,16 GB
  • Windows Server 2012中R2
  • IO输入线程计数大小为30
  • IO输出线程计数大小为50

2017-06-24 23:46:22.679错误(hz._hzInstance_1_My-App.partition-operation.thread-5)[chmioGetOperati无法发送响应:HeapData {type = -2,hashCode = 113248027,partitionHash = 113248027,totalSize = 722,dataSize = 714,heapCost = 742] - [192.168.111.11]:5701 [My-App] [3.6.3] }到地址[192.168.111.13]:5701。 Op:com.hazelcast.map.impl.operation.GetOperation {identityHash = 1124265765,serviceName ='hz:impl:mapService',partitionId = 189,replicaIndex = 0,callId = 3490089,invocationTime = 1498362385498(Sat Jun 24 23:46 :25 EDT 2017),waitTimeout = -1,callTimeout = 8000,name = HKF/my-cache-id-3,name = HKF/my-cache-id-3} com.hazelcast.spi.exception.ResponseNotSentException:无法向地址[192.168.111.13]:5701发送响应:HeapData {type = -2,hashCode = 113248027,partitionHash = 113248027,totalSize = 722,dataSize = 714,heapCost = 742}。 Op:com.hazelcast.map.impl.operation.GetOperation {identityHash = 1124265765,serviceName ='hz:impl:mapService',partitionId = 189,replicaIndex = 0,callId = 3490089,invocationTime = 1498362385498(Sat Jun 24 23:46 :25:00 2017),waitTimeout = -1,callTimeout = 8000,name = HKF/my-cache-id-3,name = HKF/my-cache-id-3} at com.hazelcast.spi.impl.operationservice .impl.RemoteInvocationResponseHandler.sendResponse(RemoteInvocationResponseHandler.java:54) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.sendResponse(OperationRunnerImpl.java:278) at com.hazelcast.spi.impl.operationservice.impl .OperationRunnerImpl.handleResponse(OperationRunnerImpl.java:251) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:173) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl .RUN(Operati onRunnerImpl.java:393) 在com.hazelcast.spi.impl.operationexecutor.classic.OperationThread.processPacket(OperationThread.java:184)

回答

1

为什么你有这么大的输入和输出线程数(30/50)。在大多数情况下,3 + 3的默认值绰绰有余。如果你没有50多个连接,所有这些线程都将空闲。即使有50多个连接,使用这么多的IO线程也不会获得良好的性能。

您所看到的错误似乎表明存在网络问题:无法发送回复。最大的问题是为什么会发生这种情况。

您可以启用诊断:

http://docs.hazelcast.org/docs/latest-development/manual/html/Management/Diagnostics/Enabling_Diagnostics_Logging.html

而在hazelcast的日志文件发送到彼得点com所以,我可以看看它。

+0

我们将“读取IO”线程数设置为50,认为如果当前节点在给定时刻从远程节点读取50个数据对象,则需要50个线程。只是你知道,同步读取缓存。让我知道如果不需要。有些情况下我们可以做到2000次读取/秒。 – manish

+0

对于诊断,我将不得不重新运行负载测试。我会在几天内回复你。 – manish

+0

每个节点1个连接,2个线程处理1个连接;一个用于输入,另一个用于输出。在4节点集群上,由于每个成员将有3个连接到每个其他成员,因此使用的IO线程的最大数量默认为3 + 3。 另外,如果连接数比IO线更多,则IO线程可以依赖流水线;所以他们读取或写入更大的数据块,从而减少开销。 因此,将IO线程数重置为默认值。 – pveentjer