Мы используем Apache Ignite для кэширования и наблюдаем непредвиденное поведение на всех клиентах кластера при сбое одного из клиентов. Сам кластер Ignite имеет три сервера, и приблизительно 12 серверов подключаются к этому кластеру в качестве клиентов. В кластере отключено постоянство, и во многих из кэшей включено почти кэширование.
Что мы видим, так это то, что при сбое одного из клиентов (нехватка памяти, высокая загрузка ЦП, сетевое подключение и т. Д.) Потоки на всех других клиентах блокируются на определенный период времени. В это время сами серверы Ignite выглядят нормально, но в журналах я вижу такие вещи:
Topology snapshot [ver=123, servers=3, clients=11, CPUs=XXX, offheap=XX.XGB, heap=XXX.GB]
Topology snapshot [ver=124, servers=3, clients=10, CPUs=XXX, offheap=XX.XGB, heap=XXX.GB]
Сама топология явно меняется, когда клиент подключается / отключается, но происходит ли внутри кластера что-нибудь, что может вызвать блокировку на других клиентах? Я ожидал бы повторной балансировки данных, когда сервер отключается, но не клиент.
Из дампа потока я вижу много потоков, застрявших в следующем состоянии:
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x000000078a86ff18> (a java.util.concurrent.CountDownLatch$Sync)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireSharedNanos(AbstractQueuedSynchronizer.java:1037)
at java.util.concurrent.locks.AbstractQueuedSynchronizer.tryAcquireSharedNanos(AbstractQueuedSynchronizer.java:1328)
at java.util.concurrent.CountDownLatch.await(CountDownLatch.java:277)
at org.apache.ignite.internal.util.IgniteUtils.await(IgniteUtils.java:7452)
at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.awaitAllReplies(GridReduceQueryExecutor.java:1056)
at org.apache.ignite.internal.processors.query.h2.twostep.GridReduceQueryExecutor.query(GridReduceQueryExecutor.java:733)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$8.iterator(IgniteH2Indexing.java:1339)
at org.apache.ignite.internal.processors.cache.QueryCursorImpl.iterator(QueryCursorImpl.java:95)
at org.apache.ignite.internal.processors.query.h2.IgniteH2Indexing$9.iterator(IgniteH2Indexing.java:1403)
at org.apache.ignite.internal.processors.cache.QueryCursorImpl.iterator(QueryCursorImpl.java:95)
at java.lang.Iterable.forEach(Iterable.java:74)
...
Будем весьма благодарны за любые идеи, предложения или дальнейшие возможности для расследования.