Java jvm偶尔分叉重复的子对象

Java jvm偶尔分叉重复的子对象,java,jvm,Java,Jvm,我有一个java应用程序,它正在派生子JVM来执行一些操作。子进程看起来与包含所有参数的父进程相同 为了确认父级,我验证了父级Id及其始终为原始JVM 应用程序以普通java进程运行,即不在任何服务器(如apache、weblogic等)中运行。 由于进程具有相同的参数,因此两者都在写入相同的日志文件,而打开的文件也太相同 这是以前没有出现过的新行为。有没有人能提供线索,说明应该检查什么才能找到原因 JVM版本:-OpenJDK运行时环境(IcedTea 2.5.6)(7u79-2.5.6-0u

我有一个java应用程序,它正在派生子JVM来执行一些操作。子进程看起来与包含所有参数的父进程相同

为了确认父级,我验证了父级Id及其始终为原始JVM

应用程序以普通java进程运行,即不在任何服务器(如apache、weblogic等)中运行。 由于进程具有相同的参数,因此两者都在写入相同的日志文件,而打开的文件也太相同

这是以前没有出现过的新行为。有没有人能提供线索,说明应该检查什么才能找到原因

JVM版本:-OpenJDK运行时环境(IcedTea 2.5.6)(7u79-2.5.6-0ubuntu1.14.04.1)
操作系统:Ubuntu 14.04

一种可能是显式调用
运行时
方法

如下所示:

Process process = Runtime.getRuntime ().exec("java -jar myApp.jar");
这将创建主进程的新进程子进程


这可以显式地(使用前面的代码)完成,也可以隐式地调用一些外部库,例如根据一些配置文件启动一个新进程。

我们通过Processbuilder调用tar,它在forkAndExec上遇到了挂起。Fork成功了,所以可以看到java进程,但不能看到exec。由于大量的磁盘操作,它在关闭系统调用时会被挂起。

您能再补充一点细节吗?你是如何观察孩子的过程的?您的java进程在做什么,它是否像@David指出的那样创建了任何线程或调用了外部二进制文件?我已经设置了警报来监视捕获额外运行进程的进程。我不是在调用类似exec的东西,而是在使用许多不同的线程池。ThreadPool之前也存在,但现在开始出现问题。我们正在通过Processbuilder调用tar,而Processbuilder在forkAndExec遇到了问题。Fork成功了,所以可以看到java进程,但不能看到exec。它在close syscall中被挂起了很长一段时间。你可能可以把它作为一个答案添加进来,这样就更容易发现了,我敢肯定其他人偶尔也会碰到这个问题。