外部进程使Java消耗大量CPU

时间:2012-04-07 12:01:34

标签: java multithreading performance exec cpu-usage

在尝试调试我的多线程Java应用程序消耗大量CPU的原因时,我发现每个线程执行的外部命令都不是CPU密集型的,但是当Java运行它时,我发现Java运行时占用了我的100%中央处理器。

为了进一步调试,我用简单的Linux“ls”命令替换了外部进程。这是我如何运行它 -

String[] commands = new String[]{"/bin/sh", "-c", "ls"};
            try {
                Process p = Runtime.getRuntime().exec(commands);
             } catch (IOException ex) {
               //
}

但是,我看到Java使用了所有的CPU。

我甚至没有读取进程的任何输出,也没有打开任何类型的流。

可能有什么不对?从Java外部运行时,如何使用简单的ls命令导致Java运行时占用大量CPU?

不是运行外部命令,而是模拟线程处理,我尝试使用Thread.Sleep()并且它工作正常 - 不再需要CPU占用

1 个答案:

答案 0 :(得分:0)

看起来像一个已知问题,我想我需要使用这个 - https://github.com/axiak/java_posix_spawn

更新

使用java_posix_spawn后,问题就消失了!