2012-07-18 44 views
4

我正在使用Hazelcast來緩存JMS主題。爲什麼會出現這些Hazelcast警告?

一切都很好,直到一點。約30-40分鐘運行時間後,我開始越來越:

WARNING: [192.168.3.102]:5701 [devGroup] RedoLog{key=Data{partitionHash=-1465305045} size= 10, operation=CONCURRENT_MAP_PUT_IF_ABSENT, target=Address[192.168.3.102]:5701, targetConnected=false, redoCount=910, migrating=null 
partition=Partition [186]{ 
0:Address[192.168.3.102]:5701 
} 
} 

雖然我從閱讀開發論壇,這些理解很多都是重做警告意味着Hazelcast無法連接到指定的實例target=Address[192.168.3.102]:5701分配緩存。

奇怪的是卻是我的配置只有一個節點,這是當前服務器實例:

INFO: [192.168.3.102]:5701 [devGroup] 
Members [1] { 
    Member [192.168.3.102]:5701 this 
} 

我使用Spring配置它:

<hz:hazelcast id="hazelcastInstance"> 
    <hz:config> 
     <hz:group 
       name="devGroup" 
       password="pass"/> 
     <hz:properties> 
      <hz:property name="hazelcast.merge.first.run.delay.seconds">5</hz:property> 
      <hz:property name="hazelcast.merge.next.run.delay.seconds">5</hz:property> 
     </hz:properties> 
     <hz:network port="5701" port-auto-increment="true"> 
      <hz:join> 
       <hz:multicast enabled="false" />  
       <hz:tcp-ip enabled="true"> 
        <hz:members>192.168.3.102</hz:members> 
       </hz:tcp-ip> 
      </hz:join> 
      <hz:symmetric-encryption enabled="true" 
            algorithm="PBEWithMD5AndDES" 
            salt="thesalt" 
            password="thepass" 
            iteration-count="19"/> 
      <hz:asymmetric-encryption enabled="false" 
             key-password="thekeypass" 
             key-alias="local" 
             store-type="JKS" 
             store-password="thestorepass" 
             store-path="keystore"/> 
     </hz:network> 
    </hz:config> 
</hz:hazelcast> 

我使用Hazelcast 2.1,Spring 3.1和Tomcat 7

那麼有人知道我爲什麼會收到警告嗎?

感謝,


要回答的評論:

我用這樣的:

final ConcurrentMap<K, V> cachedMap = getHazelcast().getMap(region); 
cachedMap.putIfAbsent(key, value); 

getHazelcast()方法返回注入通過Spring HazelcastInstance(一個在配置上面,我已經檢查了bean id,看起來沒問題)。


更新2

有地圖上的最大尺寸加入編程:

final MapConfig mapConfig = hazelcast.getConfig().getMapConfig(region); 

.... val is calculated here .... 

mapConfig.getMaxSizeConfig().setSize(val); 

val不能小於25000

我曾嘗試沒有大小配置不過,我仍然收到警告。

我還使用map.values(SqlPredicate(""))按日期獲取值。

+0

好奇 - 這IP的版本是這樣的 - 4或6?另外,我假設您的地圖存儲實現(正在使用一個)此時不被調用 - 是否正確? – 2012-07-18 14:41:38

+0

它被調用。我將存儲在JMS主題上的任何內容存儲在榛子地圖中,併成功保存一段時間。 30/40分鐘後,我開始收到警告,沒有任何東西被存儲了。 – Simeon 2012-07-18 14:55:21

+0

你使用任何IMap.lock(),IMap.lockMap()或Hazelcast事務API嗎?或者,您如何將Hazelcast用作緩存? – mmdogan 2012-07-18 14:55:42

回答

5

如果有一個地圖定義的max-size,地圖後put操作已經達到了max-size將進入redo循環,直到地圖大小下最大尺寸減小到能夠插入新的條目。

要麼你應該從地圖中刪除一些價值,或者你應該定義某種類型的地圖驅逐。我的意思是你可以定義一個或多個以下內容;

  • 設置eviction-policyeviction-percentage
  • 設置time-to-live-seconds
  • 設置max-idle-seconds

欲瞭解更多信息請參閱Hazelcast Map Eviction