我正在使用Apache Ignite,设置如下:2台服务器组成一个集群,在REPLICATED模式下配置了几个Ignite缓存。还有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(),因为在我的例子中,在初始加载后缓存中不会有更新?
发布于 2019-05-09 00:19:13
一般来说,这是意料之中的,因为您至少需要等待网络将缓存值传递到您的客户端节点。REPLICATED缓存模式意味着每个关键字都出现在每个服务器节点上,但仍然需要一些时间才能将其拉到客户机节点。
https://stackoverflow.com/questions/56027650
复制相似问题