JVM分叉偶尔会重复子节点



我有一个java应用程序,它正在分叉子JVM来执行一些操作。子进程看起来和父进程一样,包括所有参数。

为了确认父节点,我验证了父节点Id,并且它始终是原始的JVM。

应用程序作为普通java进程运行,即不在任何服务器上,如apache, weblogic等。由于进程具有相同的参数,因此它们都写入相同的日志文件,并且打开的文件也相同。

这是以前不存在的新行为。有没有人能提供一些线索,告诉我要检查什么才能找到原因?

JVM版本:- OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-0ubuntu1.14.04.1)操作系统:Ubuntu 14.04

一种可能是显式调用Runtime exec方法。

类似如下:

Process process = Runtime.getRuntime ().exec("java -jar myApp.jar");

这将创建主进程的新进程子进程。

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

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

最新更新