在Spring Reactor中获取Thread Stuck和ArrayIndexOutOfBoundsException问题(reactor.core.Reactor)

时间:2016-12-30 10:58:55

标签: spring reactor project-reactor

我们有一个漫长的运行过程(用JAVA编写),这花了很多时间来完成整个执行。因此,我们决定通过将进程从单线程转换为多线程来提高性能。

因此我们决定使用Spring Reactor并通过实现Spring Reactor(1.1.3.RELEASE)将整个过程转换为多线程。

实施后,提高了性能,实现了我们最初寻找的目标。

但经过1周的测试,我们发现了两个主要问题。

1) 螺纹卡住问题 我们已经创建了总共3个反应堆,其池大小为5,这意味着3个反应堆是并行的每个线程大小为5执行。

2) java.lang.ArrayIndexOutOfBoundsException

  

java.lang.ArrayIndexOutOfBoundsException:0           at com.gs.collections.impl.set.mutable.UnifiedSet.copyToArray(UnifiedSet.java:1992)           at com.gs.collections.impl.set.mutable.UnifiedSet.toArray(UnifiedSet.java:1972)           在com.gs.collections.impl.utility.Iterate.toArray(Iterate.java:2558)           在com.gs.collections.impl.list.mutable.FastList.newList(FastList.java:188)           at com.gs.collections.impl.set.mutable.UnifiedSet.toList(UnifiedSet.java:1330)           at com.gs.collections.impl.collection.mutable.AbstractUnmodifiableMutableCollection.toList(AbstractUnmodifiableMutableCollection.java:590)           在 reactor.event.registry.CachingRegistry.select(CachingRegistry.java:131)           at reactor.event.dispatch.Abs​​tractLifecycleDispatcher.route(AbstractLifecycleDispatcher.java:67)           at reactor.event.dispatch.Abs​​tractMultiThreadDispatcher $ MultiThreadTask.run(AbstractMultiThreadDispatcher.java:89)           at reactor.event.dispatch.WorkQueueDispatcher $ 3.onEvent(WorkQueueDispatcher.java:89)           at reactor.event.dispatch.WorkQueueDispatcher $ 3.onEvent(WorkQueueDispatcher.java:86)           在com.lmax.disruptor.WorkProcessor.run(WorkProcessor.java:138)           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)           at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)           在java.lang.Thread.run(Thread.java:745)

这个问题不会经常出现,但我们在一周内面临这样的1到2次。即使我们有不错的服务器配置,我也无法找到解决这个问题的方向。

任何人都可以帮我解决这个问题。请分享你的想法。

0 个答案:

没有答案