我正在使用具有以下設置的 Apache Ignite:2 個服務器形成一個集群,其中配置了多個 Ignite 緩存REPLICATED模式。還有 10 個 Java 進程作為客戶端連接到 Apache Ignite 集群并從這些緩存中獲取數據。在使用 VisualVM 分析客戶端 JVM 時,我發現客戶端幾乎一半的時間都在阻塞在以下行上java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:304) at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:178) at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:141) at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4723) at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4697) at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1415) at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:928) at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.get(GatewayProtectedCacheProxy.java:640)我知道可能需要鎖定才能正確處理給定緩存中給定鍵的 get()/put()。但是在我的應用程序中,我首先將所有需要的參考數據加載到 Ignite 緩存中,然后客戶端 JVM 僅從緩存中獲取數據。這種行為(在cache.get()期間花費大量時間等待)是預期的嗎?有沒有辦法在沒有鎖的情況下調用 cache.get() ,因為在我的情況下,初始加載后緩存中不會有更新?
1 回答

PIPIONE
TA貢獻1829條經驗 獲得超9個贊
通常這是預期的,因為您至少需要等待網絡將緩存值傳遞到您的客戶端節點。REPLICATED
緩存模式意味著每個密鑰都存在于每個服務器節點上,但仍需要一些時間才能將其拉到客戶端節點。
添加回答
舉報
0/150
提交
取消