2017-07-18 20 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