4

在尝试调试为什么我的多线程 Java 应用程序消耗大量 CPU 时,我发现每个线程都执行一个外部命令,这根本不是 CPU 密集型的,但是当 Java 运行它时,我发现 Java 运行时占用了我 100% 的 CPU。

为了进一步调试,我用简单的 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

4

1 回答 1

0

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

更新:

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

于 2012-04-07T13:06:14.257 回答