ProcessBuilder.start上的Java拒绝执行异常

ProcessBuilder.start上的Java拒绝执行异常,java,unix,process,processbuilder,Java,Unix,Process,Processbuilder,编辑 经过一番挖掘,我发现有一个测试运行一些代码,用自定义代码替换一些实现定义的位(使用反射进行替换),清理导致执行器终止。这解决了我的问题,但觉得不值得回答 我仍然在想,在多运行了一系列CI之后,我意识到每次都有两个运行者遇到这个错误,但最后一个从来没有遇到过,我的虚拟机随机出现了这个错误。不过,如果我愿意发布的话,这将是一个单独的问题 因此,我将尝试关闭这个问题,因为我不再认为它是相关的。 我最近遇到了一个奇怪的问题。现在,我不能提供MCVE,因为问题发生在CI运行中,我在本地重新创建它时遇

编辑

经过一番挖掘,我发现有一个测试运行一些代码,用自定义代码替换一些实现定义的位(使用反射进行替换),清理导致执行器终止。这解决了我的问题,但觉得不值得回答

我仍然在想,在多运行了一系列CI之后,我意识到每次都有两个运行者遇到这个错误,但最后一个从来没有遇到过,我的虚拟机随机出现了这个错误。不过,如果我愿意发布的话,这将是一个单独的问题

因此,我将尝试关闭这个问题,因为我不再认为它是相关的。 我最近遇到了一个奇怪的问题。现在,我不能提供MCVE,因为问题发生在CI运行中,我在本地重新创建它时遇到了困难,而且在CI中也不总是发生

在特定测试期间,ProcessBuilder.start()上会发生此异常,但在实时操作中,所有操作似乎都运行正常

java.util.concurrent.RejectedExecutionException: Task java.lang.UNIXProcess$$Lambda$7/108449608@4814a677 rejected from java.util.concurrent.ThreadPoolExecutor@71e6bac0[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
    at java.lang.UNIXProcess.initStreams(UNIXProcess.java:288)
    at java.lang.UNIXProcess.lambda$new$2(UNIXProcess.java:258)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:257)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    at place.where.processbuilder.start.is.called.during.test...
java.util.concurrent.RejectedExecutionException:任务java.lang.UNIXProcess$$Lambda$7/108449608@4814a677已从java.util.concurrent中拒绝。ThreadPoolExecutor@71e6bac0[已终止,池大小=0,活动线程=0,排队任务=0,已完成任务=0]
位于java.lang.UNIXProcess.initStreams(UNIXProcess.java:288)
lambda$new$2(UNIXProcess.java:258)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.lang.UNIXProcess(UNIXProcess.java:257)
在java.lang.ProcessImpl.start(ProcessImpl.java:134)处
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
在place.where.processbuilder.start.is.called.during.test。。。
CI在CentOS7上运行Maven构建,到目前为止,异常发生了4次中的3次,在本地,我在CentOS7上运行相同的构建,2次中只有1次发生了异常,而且在10次以上的运行中,当测试套件简化为仅发生异常的测试时(通过将测试名称指定为Maven),从未发生过异常

所有对RejectedExecutionException的搜索都会让我看到一些帖子,其中人们会最大限度地利用自己池中的容量,但这似乎是Java的内部池,由于某种原因似乎被终止了


我想知道一开始是什么终止了池,但现在不知道如何跟踪内部实现定义的东西。任何想法都将不胜感激。

这确实很奇怪,我还没有看到。你是不是碰巧在这里同时启动了许多外部流程?@JoachimSauer老实说,我不知道Maven是如何运行这些阶段的,但特定的测试应该只尝试启动一个流程。我投票结束这个问题,因为它不再相关,但我不想直接删除是的,把你的发现写下来作为答案也一样好,但这绝对不是必需的(特别是因为这是一个自我产生的问题,不太可能以完全相同的方式发生在其他人身上).@JoachimSauer这就是为什么我觉得不值得让它成为一个成熟的安瓦尔。我觉得我的发现使这个问题无效,而不是回答它。这确实很奇怪,我还没有看到这一点。你是不是碰巧在这里同时启动了许多外部流程?@JoachimSauer老实说,我不知道Maven是如何运行这些阶段的,但特定的测试应该只尝试启动一个流程。我投票结束这个问题,因为它不再相关,但我不想直接删除是的,把你的发现写下来作为答案也一样好,但这绝对不是必需的(特别是因为这是一个自我产生的问题,不太可能以完全相同的方式发生在其他人身上).@JoachimSauer这就是为什么我觉得不值得让它成为一个成熟的安瓦尔。我觉得我的发现使这个问题无效,而不是一言以蔽之。