执行程序服务和可调用java.lang.IllegalStateException:java.util.concurrent.ExecutionException

时间:2018-07-11 11:41:25

标签: java rmi jmx

我有一个代码,可从其他计算机远程获取JMX指标并将其插入数据库。该代码由Executor ServicesCallables实现:

ExecutorService executor = Executors.newWorkStealingPool();
ArrayList<Callable<String>> callables = new ArrayList<>();
for (String i : nhost.getHosts()) {
           callables.add(
                   () -> { sth ; }
}

while (true) {

        executor.invokeAll(callables).stream()
                .map(future -> {
                    try {
                        return future.get();
                    } catch (Exception e) {
                        throw new IllegalStateException(e);
                    }
                })
                .forEach(
                        entry -> ESBRun.display(entry)
                );
        TimeUnit.SECONDS.sleep(sleep);
    }
}

运行一段时间(大约5000次循环)后,它会出错:

Exception in thread "main" java.lang.IllegalStateException: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
    java.io.EOFException
    at RealtimeMetricsRun.lambda$main$6(RealtimeMetricsRun.java:263)
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
    at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
    at java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151)
    at java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418)
    at RealtimeMetricsRun.main(RealtimeMetricsRun.java:266)
Caused by: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.lang.RuntimeException: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
    java.io.EOFException
    at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1006)
    at RealtimeMetricsRun.lambda$main$6(RealtimeMetricsRun.java:261)
    ... 9 more
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
    java.io.EOFException
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
    at java.util.concurrent.ForkJoinTask.get(ForkJoinTask.java:1005)
    ... 10 more
Caused by: java.lang.RuntimeException: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
    java.io.EOFException
    at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1431)
    at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
    at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
    at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
    at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.rmi.UnmarshalException: Error unmarshaling return header; nested exception is: 
    java.io.EOFException
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:236)
    at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:161)
    at com.sun.jmx.remote.internal.PRef.invoke(Unknown Source)
    at javax.management.remote.rmi.RMIConnectionImpl_Stub.getAttribute(Unknown Source)
    at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.getAttribute(RMIConnector.java:903)
    at NodeManagerMetrics.getYARNNodeManagerCoreAvailable(NodeManagerMetrics.java:28)
    at SchedulerRun.monitorNodeManagerMetrics(SchedulerRun.java:210)
    at RealtimeMetricsRun.lambda$main$1(RealtimeMetricsRun.java:106)
    at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
    ... 4 more
Caused by: java.io.EOFException
    at java.io.DataInputStream.readByte(DataInputStream.java:267)
    at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:222)
    ... 12 more

该错误包含几种类型的错误,但我不知道是什么原因引起的。我想这是因为获取节点JMX指标时发生错误,但我不知道该如何处理?

0 个答案:

没有答案
相关问题