#hazelcast #hazelcast-jet
#hazelcast #hazelcast-jet
Вопрос:
Я столкнулся со странным поведением в Hazelcast Jet. Я запускаю много заданий одновременно (~ 30, некоторые запускаются немного раньше других). Однако, когда количество заданий в моем Hazelcast Jet достигло 26 (магическое число?), Вся обработка застряла.
В дампах потоков я вижу следующую информацию:
"hz._hzInstance_1_jet.cached.thread-1" #37 prio=5 os_prio=0 cpu=1093.29ms elapsed=393.62s tid=0x00007f95dc007000 nid=0x6bfc in Object.wait() [0x00007f95e6af4000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java.base@11.0.2/Native Method)
- waiting on <no object reference available>
at com.hazelcast.spi.impl.AbstractCompletableFuture.get(AbstractCompletableFuture.java:229)
- waiting to re-lock in wait() <0x00000007864b7040> (a com.hazelcast.internal.util.SimpleCompletableFuture)
at com.hazelcast.spi.impl.AbstractCompletableFuture.get(AbstractCompletableFuture.java:191)
at com.hazelcast.spi.impl.operationservice.impl.InvokeOnPartitions.invoke(InvokeOnPartitions.java:88)
at com.hazelcast.spi.impl.operationservice.impl.OperationServiceImpl.invokeOnAllPartitions(OperationServiceImpl.java:385)
at com.hazelcast.map.impl.proxy.MapProxySupport.clearInternal(MapProxySupport.java:1016)
at com.hazelcast.map.impl.proxy.MapProxyImpl.clearInternal(MapProxyImpl.java:109)
at com.hazelcast.map.impl.proxy.MapProxyImpl.clear(MapProxyImpl.java:698)
at com.hazelcast.jet.impl.JobRepository.clearSnapshotData(JobRepository.java:464)
at com.hazelcast.jet.impl.MasterJobContext.tryStartJob(MasterJobContext.java:233)
at com.hazelcast.jet.impl.JobCoordinationService.tryStartJob(JobCoordinationService.java:776)
at com.hazelcast.jet.impl.JobCoordinationService.lambda$submitJob$0(JobCoordinationService.java:200)
at com.hazelcast.jet.impl.JobCoordinationService$$Lambda$634/0x00000008009ce840.run(Unknown Source)
а также:
"hz._hzInstance_1_jet.async.thread-2" #81 prio=5 os_prio=0 cpu=0.00ms elapsed=661.98s tid=0x0000025bb23ef000 nid=0x43bc in Object.wait() [0x0000005d492fe000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(java.base@11/Native Method)
- waiting on <no object reference available>
at com.hazelcast.spi.impl.AbstractCompletableFuture.get(AbstractCompletableFuture.java:229)
- waiting to re-lock in wait() <0x0000000725600100> (a com.hazelcast.internal.util.SimpleCompletableFuture)
at com.hazelcast.spi.impl.AbstractCompletableFuture.get(AbstractCompletableFuture.java:191)
at com.hazelcast.spi.impl.operationservice.impl.InvokeOnPartitions.invoke(InvokeOnPartitions.java:88)
at com.hazelcast.spi.impl.operationservice.impl.OperationServiceImpl.invokeOnAllPartitions(OperationServiceImpl.java:385)
at com.hazelcast.map.impl.proxy.MapProxySupport.removeAllInternal(MapProxySupport.java:619)
at com.hazelcast.map.impl.proxy.MapProxyImpl.removeAll(MapProxyImpl.java:285)
at com.hazelcast.jet.impl.JobRepository.deleteJob(JobRepository.java:332)
at com.hazelcast.jet.impl.JobRepository.completeJob(JobRepository.java:316)
at com.hazelcast.jet.impl.JobCoordinationService.completeJob(JobCoordinationService.java:576)
at com.hazelcast.jet.impl.MasterJobContext.lambda$finalizeJob$13(MasterJobContext.java:620)
at com.hazelcast.jet.impl.MasterJobContext$$Lambda$783/0x0000000800b26840.run(Unknown Source)
at com.hazelcast.jet.impl.MasterJobContext.finalizeJob(MasterJobContext.java:632)
at com.hazelcast.jet.impl.MasterJobContext.onCompleteExecutionCompleted(MasterJobContext.java:564)
at com.hazelcast.jet.impl.MasterJobContext.lambda$invokeCompleteExecution$6(MasterJobContext.java:544)
at com.hazelcast.jet.impl.MasterJobContext$$Lambda$779/0x0000000800b27840.accept(Unknown Source)
at com.hazelcast.jet.impl.MasterContext.lambda$invokeOnParticipants$0(MasterContext.java:242)
at com.hazelcast.jet.impl.MasterContext$$Lambda$726/0x0000000800a1c040.accept(Unknown Source)
at com.hazelcast.jet.impl.util.Util$2.onResponse(Util.java:172)
at com.hazelcast.spi.impl.AbstractInvocationFuture$1.run(AbstractInvocationFuture.java:256)
at java.util.concurrent.ThreadPoolExecutor.runWorker(java.base@11/ThreadPoolExecutor.java:1128)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(java.base@11/ThreadPoolExecutor.java:628)
at java.lang.Thread.run(java.base@11/Thread.java:834)
at com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64)
at com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80)
У меня нет никакой другой информации о том, как воспроизвести эту проблему, однако я надеюсь, что кто-нибудь знает, как это исправить, или мой вопрос поможет кому-то еще 🙂
Мои настройки: — Java 11 — Снимок Hazelcast 3.12 — Снимок Hazelcast Jet 3.0 (я не могу вернуться к предыдущей версии, это нарушит мою логику; Мне нужно n: m соединений, которые будут добавлены в 3.1) — Количество ядер процессора: 4 — Оперативная память: 7 ГБ — Режим Jet: сервер, подключается к другому кластеру в качестве клиента для вставки окончательных данных.
Кто-нибудь сталкивался с подобной проблемой? Проблема в том, что это нельзя просто воспроизвести, поэтому команде Hazelcast сложно создать проблему. Только threaddumps и общее поведение могут дать подсказку о том, что происходит.
Комментарии:
1. Примечание: Я знаю, что у меня нет MVCE, но, несмотря на это, команда Hazelcast попросила меня опубликовать это в StackOverflow, потому что решение может помочь другим пользователям. Я предполагаю, что у них будут некоторые идеи, как это решить 🙂
2. Не могли бы вы вместо этого создать проблему с GitHub, поскольку это явно ошибка, а не вопрос? Полный дамп потока тоже был бы отличным, если это возможно. Кажется вероятным, что это из-за некоторой взаимоблокировки, поскольку при обратном вызове выполняется некоторый блокирующий код. Единственное, что нужно попробовать, это увеличить количество потоков операций и разделов, изменив свойства группы
PARTITION_OPERATION_THREAD_COUNT
иGENERIC_OPERATION_THREAD_COUNT
на данный момент.3. Я легко воспроизвел проблему, отправив задания параллельно.
4. @CanGencer Готово: github.com/hazelcast/hazelcast-jet/issues/1339 🙂
Ответ №1:
Это была проблема в 3.0-SNAPSHOT во время разработки и была исправлена в версии 3.0.