Apache Ignite 2.7.0 - много времени, проведенного в GridFutureAdapter.get0 () - PullRequest
0 голосов
/ 07 мая 2019

Я использую Apache Ignite со следующей настройкой: 2 сервера образуют кластер с несколькими кешами Ignite, настроенными в режиме REPLICATED. Существует также 10 процессов Java, которые подключаются к кластеру Apache Ignite в качестве клиентов и получают данные из этих кэшей.

При профилировании клиентских JVM с помощью VisualVM я вижу, что клиенты проводят почти половину своего времени в заблокированном режиме в следующей строке

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 Ответ

1 голос
/ 08 мая 2019

В общем, это ожидаемо, потому что вам нужно подождать, пока сеть доставит значения кеша на ваш клиентский узел как минимум. REPLICATED Режим кэширования означает, что каждый ключ присутствует на каждом узле сервера, но для его передачи на клиентский узел все еще требуется некоторое время.

...